Eu acho que tem mais a ver com a forma como as opções estão sendo analisadas pelo shell. Por exemplo, isso funciona:
$ ssh root@server /bin/sh -c '"cd /boot && ls -l"'
Isso tem o mesmo problema que o seu comando:
$ ssh root@server /bin/sh -c 'cd /boot && ls -l'
Se você ativar o -v
switch, ssh
poderá ver o que está acontecendo:
1º comando:
debug1: Enviando comando: / bin / sh -c "cd / boot && ls -l"
2º comando:
debug1: Comando de envio: / bin / sh -c cd / boot && ls -l
Normalmente, ao enviar comandos, ssh
você deve prestar atenção especial às aspas e agrupar aspas entre aspas, pois as várias camadas as separam. Também não se incomode em enviar /bin/sh
.
Você pode fazer algo muito útil depois de entender a citação ssh
, como a seguir. Isso executará o comando no servidor remoto, mas coletará os resultados em um arquivo localmente no sistema em que você executou o ssh
comando:
$ ssh root@server 'free -m' > /tmp/memory.status
ou isto, em que você tar um diretório em um servidor remoto e o cria no sistema local:
$ ssh remotehost 'tar zcvf - SOURCEDIR' | cat > DESTFILE.tar.gz
Referências
ssh root@server /bin/sh -c "ls -l /boot"
?