Question

Je suis en train d'écrire essentiellement une commande semblable à pstree sauf qu'il doit suivre les processus dans les machines.

Ce que je veux dire est que si je lance ceci:

$ ssh $node sleep 1000

Ensuite, la commande doit afficher quelque chose comme ceci:

ssh $node -- ($node) sleep 1000

Et si je suis en cours d'exécution:

$ ssh $node ssh $node sleep 1000

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

Et ainsi de suite ...

Ma question est la suivante: Comment puis-je la carte une session ssh sur une machine à un processus donné naissance sur une autre machine

?

processus parent-enfant local ne sont pas un problème, mais comment puis-je savoir quelle commande ssh sur un nœud qui a déclenché un autre processus sur un autre nœud.

  1. linux 2.6.18

  2. ne OpenSSH pour des choses "à distance". Exécution OpenSSH_4.3p2 actuellement.

  3. accès SSH à tous les nœuds de cours (auth à base de clé) de manière ps et netstat sont disponibles à partir de tous les nœuds.

  4. Linux uniquement "hacks" sont très bien, n'a pas besoin d'être portable si ce serait un bonus supplémentaire bien sûr.

  5. L'utilisateur sera toujours le même et ma commande / script est en cours d'exécution de cet utilisateur. Cet utilisateur n'est pas racine.

  6. N'a pas d'être rapide, que précis.

La solution spontanée serait d'écrire un clone pstree, qui déclenche sur la chaîne de commande « ssh », les chiffres sur la source de port, puis va à la machine distante en question et les chiffres sur lesquels l'un des enfants de sshd qui a été pondu par cette commande particulière.

Mais peut-être il y a un moyen plus intelligent? : P

Était-ce utile?

La solution

En fait, je pense que votre solution spontanée est la bonne façon de le faire: utiliser netstat pour obtenir la source de port et chercher sur la machine distante. Vous pourriez avoir du mal à utiliser « -p netstat » sans être root -. Je l'ai essayé sur deux machines, un qui était heureux de me montrer mes propres processus et qui n'a pas été

En plus des clients ssh, vous pouvez l'étendre à chercher d'autres clients qui utilisent des connexions SSH, comme rsync ou Mercurial. Il suffit de faire attention à ne pas tracer propre connexion de votre programme récursive!

Une expérience rapide avec netstat et pstree montre que l'idée est bonne:

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

Je serais curieux de voir le résultat, car il serait très utile pour moi!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top