Linux 跨机器跟踪PID(ssh)

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会话映射到另一台机

我基本上是在尝试编写一个类似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命令触发了另一个节点上的另一个进程

  • linux 2.6.18

  • 只有openSSH用于“远程”内容。当前正在运行OpenSSH_4.3p2

  • SSH当然可以访问所有节点(基于密钥的身份验证),因此所有节点都可以使用ps和netstat

  • 只使用Linux的“黑客”是可以的,不需要是可移植的,尽管这当然是一个额外的好处

  • 用户将始终是相同的,并且我的命令/脚本正在与该用户一样运行。该用户不是root用户

  • 不一定要快,只要准确

  • 自发的解决方案是编写一个
    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”。