Domanda

sto fondamentalmente cercando di scrivere un comando pstree simile, tranne che dovrebbe seguire i processi attraverso le macchine.

Quello che voglio dire è che se corro questo:

$ ssh $node sleep 1000

Poi il comando deve visualizzare qualcosa di simile:

ssh $node -- ($node) sleep 1000

E se sto correndo:

$ ssh $node ssh $node sleep 1000

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

E così via ...

La mia domanda è questa: come posso mappare una sessione ssh su una macchina a un processo generato su un'altra macchina

?

processi locali padre-figlio non sono un problema, ma come posso capire quali comando ssh su un nodo che ha attivato un altro processo in un altro nodo.

  1. Linux 2.6.18

  2. solo OpenSSH per roba "a distanza". Esecuzione OpenSSH_4.3p2 attualmente.

  3. l'accesso SSH per tutti i nodi del corso (chiave di autenticazione basato) in modo ps e netstat sono disponibili presso tutti i nodi.

  4. Linux-only "hack" vanno bene, non ha bisogno di essere portatile, tuttavia, che sarebbe un ulteriore bonus, naturalmente.

  5. L'utente sarà sempre lo stesso e il mio comando / script è in esecuzione come quell'utente. Questo utente non è root.

  6. non deve essere veloce, solo accurata.

La soluzione spontanea sarebbe quella di scrivere un clone pstree, che si innesca quando la stringa di comando "ssh", figure la fonte porta e poi va alla macchina remota in questione e le figure che uno dei figli di sshd che è stato generato da questo particolare comando.

Ma forse c'è un modo più intelligente? : P

È stato utile?

Soluzione

In realtà, credo che la soluzione spontanea è il modo giusto per farlo: l'uso netstat per ottenere la fonte-porto e cercarlo sulla macchina remota. Si potrebbe avere problemi con l'uso "-p netstat" senza essere root -. Ho provato su due macchine, uno che era felice di mostrarmi i miei processi e uno che non era

Così come client ssh, si potrebbe estendere questo per cercare altri client che utilizzano connessioni ssh, come rsync o Mercurial. Basta essere attenti a non tracciare propria connessione del vostro programma in modo ricorsivo!

Un esperimento veloce con netstat e pstree mostra che l'idea è suono:

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

Sarei curioso di vedere il risultato, perché sarebbe molto utile per me!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top