Tôi nghĩ nó có liên quan nhiều hơn đến cách các tùy chọn được phân tích cú pháp bởi trình bao. Ví dụ, điều này hoạt động:
$ ssh root@server /bin/sh -c '"cd /boot && ls -l"'
Điều này có cùng vấn đề với lệnh của bạn:
$ ssh root@server /bin/sh -c 'cd /boot && ls -l'
Nếu bạn bật công -v
tắc, ssh
bạn có thể thấy những gì đang diễn ra:
Lệnh 1:
debug1: Lệnh gửi: / bin / sh -c "cd / boot && ls -l"
Lệnh thứ 2:
debug1: Lệnh gửi: / bin / sh -c cd / boot && ls -l
Thông thường khi gửi lệnh thông qua ssh
bạn phải đặc biệt chú ý đến trích dẫn và bọc dấu ngoặc kép trong dấu ngoặc kép khi các lớp khác nhau loại bỏ chúng. Cũng đừng bận tâm gửi /bin/sh
.
Bạn có thể làm điều rất hữu ích một khi bạn hiểu được trích dẫn ssh
như sau. Điều này sẽ chạy lệnh trên máy chủ từ xa nhưng thu thập kết quả trong một tệp cục bộ trên hệ thống nơi bạn đã chạy ssh
lệnh:
$ ssh root@server 'free -m' > /tmp/memory.status
hoặc cái này, nơi bạn tar một thư mục trên một máy chủ từ xa và tạo nó trên hệ thống cục bộ:
$ ssh remotehost 'tar zcvf - SOURCEDIR' | cat > DESTFILE.tar.gz
Tài liệu tham khảo
ssh root@server /bin/sh -c "ls -l /boot"
?