ssh não mostrando saída completa do comando

2

Eu tenho uma lista de servidores 20+ que eu gostaria de obter o shell que eles estão usando. Enquanto estiver logado em um servidor, posso executar o seguinte comando

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

Em vez de tocar em cada servidor e fazer isso, tentei fazer um loop com uma lista

$ 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

Looping isso não mostra a saída esperada. Eu então tentei usar o ssh em um único servidor e executar o comando, mas recebi o mesmo erro.

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

Por que isso está acontecendo, nada aparece nas páginas de manual do ssh.

    
por SpruceTips 22.06.2015 / 23:31

1 resposta

4

Isso ocorre porque o processo não existe.

O $$ está sendo avaliado localmente e todos os servidores estão sendo passados no mesmo número. Um número que não é um PID usado atualmente nos servidores.

Todo o material $ é feito pelo shell, não pelos comandos. Você precisa escapar, para que seja avaliado pelo shell no servidor.

Experimente \$\$

por exemplo,

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

não testado

    
por 22.06.2015 / 23:34