SSH가 명령의 전체 출력을 표시하지 않습니다.

SSH가 명령의 전체 출력을 표시하지 않습니다.

20개 이상의 서버 목록이 있고 그들이 사용하는 쉘을 얻고 싶습니다. 서버에 로그인한 후 다음 명령을 실행할 수 있습니다.

$ ps -p $$
PID TTY          TIME CMD
12022 pts/6    00:00:00 bash

각 서버를 건드리는 대신 목록으로 반복해 보았습니다.

$ for i in `cat servlist`; do echo $i ; ssh $i ps -p $$ ; done
serv1
PID TTY          TIME CMD
serv2
PID TTY          TIME CMD
serv3
PID TTY          TIME CMD

이것을 반복하면 예상되는 출력이 표시되지 않습니다. 그런 다음 단일 서버로 SSH를 통해 명령을 실행하려고 시도했지만 동일한 오류가 발생했습니다.

$ ssh serv4 ps -p $$
PID TTY          TIME CMD

SSH 매뉴얼 페이지에는 왜 이런 일이 발생하는지 생각하게 만드는 내용이 없습니다.

답변1

그 이유는 프로세스가 존재하지 않기 때문입니다.

로컬로 평가 되고 $$있으며 모든 서버가 동일한 번호를 전달합니다. 현재 서버에서 사용하고 있는 PID가 아닌 숫자입니다.

모든 것은 $명령이 아닌 쉘에 의해 수행됩니다. 서버의 셸이 이를 평가할 수 있도록 이스케이프해야 합니다.

노력하다\$\$


예를 들어

for i in $(cat servlist); do echo $i; ssh $i 'ps -p $$'; done

테스트되지 않은

관련 정보