Myślę, że ma to więcej wspólnego z tym, jak opcje są analizowane przez powłokę. Na przykład to działa:
$ ssh root@server /bin/sh -c '"cd /boot && ls -l"'
Ma to ten sam problem, co twoje polecenie:
$ ssh root@server /bin/sh -c 'cd /boot && ls -l'
Jeśli włączysz -v
przełącznik ssh
, możesz zobaczyć, co się dzieje:
1. polecenie:
debug1: Wysyłanie polecenia: / bin / sh -c "cd / boot && ls -l"
2. polecenie:
debug1: Wysyłanie polecenia: / bin / sh -c cd / boot && ls -l
Zazwyczaj wysyłając polecenia za pośrednictwem ssh
, należy zwrócić szczególną uwagę na cytowanie i zawijać cytaty w cudzysłowy, gdy różne warstwy je usuwają. Również nie zawracaj sobie głowy wysyłaniem /bin/sh
.
Możesz zrobić bardzo przydatną rzecz, gdy zrozumiesz cytowanie ssh
takich jak następujące. Spowoduje to uruchomienie polecenia na zdalnym serwerze, ale zebranie wyników w pliku lokalnie w systemie, w którym uruchomiono ssh
polecenie:
$ ssh root@server 'free -m' > /tmp/memory.status
lub to, gdzie zapisujesz katalog na zdalnym serwerze i tworzysz go w systemie lokalnym:
$ ssh remotehost 'tar zcvf - SOURCEDIR' | cat > DESTFILE.tar.gz
Referencje
ssh root@server /bin/sh -c "ls -l /boot"
?