5

私は基本的に、マシン間でプロセスを追跡する必要があることを除いて、pstree のようなコマンドを作成しようとしています。

つまり、これを実行すると:

$ ssh $node sleep 1000

次に、コマンドは次のように表示されます。

ssh $node -- ($node) sleep 1000

そして、私が実行している場合:

$ ssh $node ssh $node sleep 1000

ssh $node---($node) ssh $node---($node) sleep 1000

等々 ...

私の質問は次のとおりです。あるマシンの 1 つの ssh セッションを別のマシンの生成されたプロセスにマップするにはどうすればよいですか?

ローカルの親子プロセスは問題ではありませんが、あるノードのどの ssh コマンドが別のノードの別のプロセスをトリガーしたかを特定するにはどうすればよいでしょうか。

  1. Linux 2.6.18

  2. 「リモート」のものにはopenSSHのみ。現在 OpenSSH_4.3p2 を実行しています。

  3. もちろん、すべてのノードへの SSH アクセス (キーベースの認証) であるため、すべてのノードから ps と netstat を使用できます。

  4. Linux のみの「ハック」は問題なく、移植可能である必要はありませんが、もちろん追加のボーナスになります。

  5. ユーザーは常に同じになり、コマンド/スクリプトはそのユーザーとして実行されます。そのユーザーは root ではありません。

  6. 高速である必要はなく、正確である必要があります。

自発的な解決策は、pstreeクローンを作成することです。これは、コマンド文字列 " ssh" でトリガーされ、ソースポートを特定し、問題のリモート マシンに移動して、sshdこの特定のコマンドによって生成された子の1 つを特定します。 .

しかし、もっと賢い方法があるのではないでしょうか? :P

4

1 に答える 1

1

実際、あなたの自発的な解決策はそれを行う正しい方法だと思います.netstatを使用してソースポートを取得し、リモートマシンでそれを探します. root にならずに "netstat -p" を使用すると問題が発生する可能性があります。2 台のマシンで試してみました。

ssh クライアントだけでなく、これを拡張して、rsync や Mercurial など、ssh 接続を使用する他のクライアントを探すこともできます。プログラム自身の接続を再帰的にトレースしないように注意してください!

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

それは私にとって非常に役立つので、結果を見てみたいと思います!

于 2010-02-09T17:00:42.470 に答える