Я думаю, что это больше связано с тем, как параметры интерпретируются оболочкой. Например, это работает:
$ ssh root@server /bin/sh -c '"cd /boot && ls -l"'
Это та же проблема, что и ваша команда:
$ ssh root@server /bin/sh -c 'cd /boot && ls -l'
Если вы включите -v
переключатель, ssh
вы сможете увидеть, что происходит:
1-я команда:
debug1: отправка команды: / bin / sh -c "cd / boot && ls -l"
2-я команда:
debug1: отправка команды: / bin / sh -c cd / boot && ls -l
Как правило, при отправке команд через них ssh
вы должны обращать особое внимание на цитаты и заключать их в кавычки, поскольку различные слои удаляют их. Также не беспокойтесь об отправке /bin/sh
.
Вы можете сделать очень полезную вещь, как только вы поймете цитату, ssh
например, следующее. Это запустит команду на удаленном сервере, но соберет результаты в файл локально в системе, где вы выполнили ssh
команду:
$ ssh root@server 'free -m' > /tmp/memory.status
или это, где вы tar каталог на удаленном сервере и создать его в локальной системе:
$ ssh remotehost 'tar zcvf - SOURCEDIR' | cat > DESTFILE.tar.gz
Ссылки
ssh root@server /bin/sh -c "ls -l /boot"
?