문제
기본적으로 기계의 프로세스를 따라야한다는 점을 제외하고는 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 명령을 어떻게 파악할 수 있습니까?
리눅스 2.6.18
"원격"물건에 대한 Openssh 만 있습니다. 현재 OpenSSH_4.3P2 실행 중입니다.
물론 모든 노드에 대한 SSH 액세스 (키 기반 인증)는 모든 노드에서 PS 및 NetStat를 사용할 수 있습니다.
Linux 전용 "Hacks"는 괜찮습니다. 물론 추가 보너스 일 것이지만 휴대용 일 필요는 없습니다.
사용자는 항상 동일하며 내 명령/스크립트가 해당 사용자로 실행됩니다. 그 사용자는 루트가 아닙니다.
빠를 필요는없고 정확합니다.
자발적인 해결책은 a를 쓰는 것입니다 pstree
클론, 명령 문자열에서 트리거 "ssh
", 소스 포트를 파악한 다음 문제의 원격 기계로 가서 어느 쪽을 알아냅니다. sshd
이 특별한 명령에 의해 산란 된 아이들.
하지만 더 영리한 방법이 있습니까? :피
해결책
실제로 자발적인 솔루션이 올바른 방법이라고 생각합니다. Netstat를 사용하여 소스 포트를 가져 와서 원격 시스템에서 찾으십시오. 루트가없는 "Netstat -P"를 사용하는 데 어려움이있을 수 있습니다. 두 대의 기계에서 시도해 보았습니다. 하나는 나 자신의 프로세스를 보여주는 것이 기뻤습니다.
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
나는 그것이 나에게 매우 유용 할 것이기 때문에 결과를보고 싶을 것입니다!