ฉันคิดว่ามันมีอะไรเพิ่มเติมเกี่ยวกับวิธีที่ตัวเลือกในการแยกวิเคราะห์โดยเชลล์ ตัวอย่างเช่นงานนี้:
$ 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
หรือสิ่งนี้ซึ่งคุณจะเก็บไดเรกทอรีไว้บนรีโมตเซิร์ฟเวอร์และสร้างมันบนระบบโลคัล:
$ ssh remotehost 'tar zcvf - SOURCEDIR' | cat > DESTFILE.tar.gz
อ้างอิง
ssh root@server /bin/sh -c "ls -l /boot"
?