简单地

简单地

当我通过 ssh 连接到远程主机时,是否有可能在本地机器上获取远程 bash pid?反之亦然?

例如在本地终端上,我只需执行 ssh 并保持连接即可运行我的任务:

ssh [email protected]

在本地机器上 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”吗?

答案1

简单地

作为@Nikita Kipriyanov 评论道,简单的方法是

ssh [email protected] 'echo $$'

(使用单引号!),但似乎没什么用,因为本地主机只有完成后才能够读取进程号。

用例:

有一些方法可以运行ssh以转发端口,例如:这将连接indirRem.remDom:22通过 ssh 代理:[email protected]

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

从那里,如果在本地主机上,你会看到类似以下内容:

ssh [email protected] ps ef $(</tmp/rpids.txt)

您可能会看到当前(打开)会话使用了哪个 pid(而您没有关闭/结束 shell 会话indirRem.remDom:22)。

Mariadb/Mysql 示例:

ssh -f -L 3306:localhost:3306 [email protected] 'echo $$ $PPID;sleep 2' >/tmp/rpids.txt &&
    mariadb -h 127.0.0.1 -p"What a strong password" database

这将mariadb在本地3306tcp 端口上本地运行客户端,但该端口是来自rem.dom(通常仅在环回设备上监听)

相同,但转发UNIX 套接字而不是 TCP 服务:

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

然后

ssh [email protected] ps ef $(</tmp/rpids.txt)

将显示sshd持有转发端口的进程。

无论如何,我不知道该怎么处理这个/tmp/rpids.txt

阅读man sshman sshd,寻找-M(主)和-S(从)开关。

相关内容