Linux 跨机器跟踪PID(ssh)
我基本上是在尝试编写一个类似pstree的命令,只是它应该跨机器跟踪进程 我的意思是,如果我运行这个:Linux 跨机器跟踪PID(ssh),linux,ssh,netstat,ps,Linux,Ssh,Netstat,Ps,我基本上是在尝试编写一个类似pstree的命令,只是它应该跨机器跟踪进程 我的意思是,如果我运行这个: $ ssh $node sleep 1000 然后,该命令应显示如下内容: ssh $node -- ($node) sleep 1000 如果我在跑步: $ ssh $node ssh $node sleep 1000 ssh $node---($node) ssh $node---($node) sleep 1000 等等 我的问题是:如何将一台机器上的一个ssh会话映射到另一台机
$ ssh $node sleep 1000
然后,该命令应显示如下内容:
ssh $node -- ($node) sleep 1000
如果我在跑步:
$ ssh $node ssh $node sleep 1000
ssh $node---($node) ssh $node---($node) sleep 1000
等等
我的问题是:如何将一台机器上的一个ssh会话映射到另一台机器上的派生进程
本地父子进程不是问题,但我如何确定一个节点上的哪个ssh命令触发了另一个节点上的另一个进程
pstree
克隆,该克隆在命令字符串“ssh
”上触发,找出源端口,然后转到相关的远程计算机,找出这个特定命令生成的sshd
的哪个子级
但也许有更聪明的方法P
事实上,我认为您的自发解决方案是正确的方法:使用netstat获取源端口并在远程机器上查找它。如果不是root用户,您可能在使用“netstat-p”时会遇到问题——我在两台机器上试用了它,一台很乐意向我展示自己的进程,另一台则不然
除了ssh客户端之外,您还可以扩展它以查找使用ssh连接的其他客户端,如rsync或Mercurial。只是要小心不要递归地跟踪程序自己的连接 使用netstat和pstree进行的快速实验表明,这个想法是正确的:me@mymachine:~$ netstat -p
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 mymachine.example:43681 remote.example.com:ssh ESTABLISHED 27044/ssh
tcp 0 0 mymachine.example:39228 remote.example.com:ssh ESTABLISHED 14499/ssh
tcp 0 0 mymachine.example:45814 remote.example.com:ssh ESTABLISHED 20899/ssh
me@mymachine:~$ ssh remote netstat -p | grep mymachine.example:43681
tcp 0 0 remote.example.com:ssh mymachine.example:43681 ESTABLISHED 10361/1
me@mymachine:~$ ssh remote pstree -a 10361
sshd
`-grep -n -e wotsit -i -R /local/home/me/somewhere /dev/null
我很想看看结果,因为它对我非常有用 我不完全理解这个问题。“映射”ssh会话是什么意思?是否要命名ssh会话?(然后尼斯应用程序屏幕将是指向解决方案的指针)我想将命令的进程id:“ssh$node sleep 1000”映射到远程机器($node)上命令的进程id:“sleep 1000”。