当我通过 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
在本地3306
tcp 端口上本地运行客户端,但该端口是来自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 ssh
和man sshd
,寻找-M
(主)和-S
(从)开关。