Frage

ich im Grunde bin versucht, einen pstree ähnliche Befehl zu schreiben, außer dass es Prozessen in Maschinen folgen.

Was ich meine ist, dass, wenn ich laufen diese:

$ ssh $node sleep 1000

Dann so etwas wie dies der Befehl sollte angezeigt werden:

ssh $node -- ($node) sleep 1000

Und wenn ich laufe:

$ ssh $node ssh $node sleep 1000

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

Und so weiter ...

Meine Frage ist: Wie kann ich eine SSH-Sitzung auf einer Maschine zu einem erzeugten Prozess auf einer anderen Maschine Karte

?

Lokale Eltern-Kind-Prozesse sind kein Problem, aber wie kann ich herausfinden, welchen Befehl ssh auf einem Knoten, der ein anderen Prozess auf einem anderen Knoten ausgelöst.

  1. Linux 2.6.18

  2. nur openSSH für "remote" stuff. Lauf OpenSSH_4.3p2 zur Zeit.

  3. SSH-Zugriff auf alle Knoten natürlich (key Basis Auth) so ps und netstat ist von allen Knoten zur Verfügung.

  4. Linux-only "Hacks" sind in Ordnung, muss nicht tragbar sein aber, dass ein zusätzlicher Bonus natürlich sein würde.

  5. Der Benutzer wird immer die gleiche und mein Befehl / script als dieser Benutzer ausgeführt wird. Dieser Benutzer ist nicht root.

  6. Muss nicht schnell sein, nur genau.

Die spontane Lösung einen pstree Klon zu schreiben wäre, die in der Befehlsfolge „ssh“ löst, Zahlen aus der Quelle-Port aus und geht dann zu dem Remote-Rechner in Frage und findet heraus, welche von sshd Kinder, die hervorgebracht wurde von diesem Befehl.

Aber vielleicht gibt es einen besseren Weg? : P

War es hilfreich?

Lösung

Eigentlich, denke ich Ihre spontane Lösung der richtige Weg ist, es zu tun: Verwenden Sie netstat die Quelle-Port zu erhalten und für sie auf dem entfernten Rechner aus. Sie könnten Probleme bei der Verwendung „netstat -p“, ohne Wurzel haben -. Ich habe versucht, es auf zwei Maschinen, eine, die glücklich war mir meine eigenen Prozesse zu zeigen, und eine, die nicht

Neben SSH-Clients, könnten Sie diese erweitern für andere Kunden zu suchen, die ssh-Verbindungen verwenden, wie rsync oder Mercurial. Nur vorsichtig sein, nicht Ihr Programm eigene Verbindung rekursiv zu verfolgen!

Ein kurzer Versuch mit netstat und pstree zeigt, dass die Idee ist Ton:

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

Ich würde mich interessieren das Ergebnis zu sehen, denn es ist sehr nützlich für mich sein würde!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top