Назад | Перейти на главную страницу

Когда ssh на удаленный хост, как я могу узнать, что pid bash запущен на удаленном хосте?

Когда я подключаюсь к удаленному хосту по ssh, могу ли я получить удаленный идентификатор bash на моем локальном компьютере? или наоборот?

например, на локальном терминале я просто использую ssh и сохраняю соединение для выполнения своих задач:

ssh user@remote.com

и ps на локальном компьютере выглядит так:

ps faux
...
shunh    32683  0.1  0.0 121148  5116 pts/2    Ss   07:02   0:00  \_ -bash
shunh    33079  0.6  0.0 189360  8484 pts/2    S+   07:03   0:00      \_ ssh -X remote_host

и на remote_host:

ps faux
...
root     214679  0.0  0.0 158820  5724 ?        Ss   07:03   0:00  \_ sshd: shunh [priv]
shunh    214681  0.0  0.0 158820  2556 ?        S    07:03   0:00      \_ sshd: shunh@pts/1
shunh    214682  0.0  0.0 121124  3608 pts/1    Ss   07:03   0:00          \_ -bash

Итак, могу ли я получить номер pid "214682" на моем локальном компьютере?

Просто

Так как @Nikita Kipriyanov прокомментировал, простой способ

ssh user@remote.domain 'echo $$'

(с использованием одинарных кавычек!), но кажется не очень полезным, потому что localhost смогут прочитать номер процесса только после его завершения.

Пример использования:

Есть способ убежать ssh для перенаправления портов, например: это подключит indirRem.remDom:22 через прокси-сервер ssh: user@rem.dom.

ssh -f -L2022:indirRem.remDom:22 user@rem.dom 'echo $$ $PPID;sleep 2' >/tmp/rpids.txt &&
    ssh -o HostKeyAlias=indirectRemote.remotedomain -p 2022 indUser@localhost

Оттуда, если вы находитесь на localhost, вы нажимаете что-то вроде:

ssh user@rem.dom ps ef $(</tmp/rpids.txt)

Вы можете увидеть, какой pid используется для текущего (открытого) сеанса (пока вы не закрываете / не завершаете сеанс оболочки на indirRem.remDom:22).

Пример Mariadb / Mysql:

ssh -f -L 3306:localhost:3306 user@rem.dom 'echo $$ $PPID;sleep 2' >/tmp/rpids.txt &&
    mariadb -h 127.0.0.1 -p"What a strong password" database

Это будет запускаться локально mariadb клиент на местном 3306 tcp порт, но этот порт перенаправляется из rem.dom (который обычно прослушивает только устройство с обратной связью)

То же, но пересылка Сокет UNIX вместо службы TCP:

ssh -f -L 3306:/var/run/mysqld/mysqld.sock user@rem.dom 'echo $$ $PPID;sleep 2' >/tmp/rpids.txt &&
    mariadb -h 127.0.0.1 -p"What a strong password" database

затем

ssh user@rem.dom ps ef $(</tmp/rpids.txt)

покажет sshd процесс, который удерживает перенаправленные порты.

Но

Во всяком случае, я не понимаю, что с этим делать /tmp/rpids.txt.

Читать man ssh и man sshd, искать -M (мастер) и -S (ведомые) переключатели.