ปิด แต่ไม่ตรง
เป็นอิสระจากสถานีใด ๆ
ssh root@remoteserver '/root/backup.sh </dev/null >/var/log/root-backup.log 2>&1 &'
คุณต้องปิดไฟล์ descriptors ทั้งหมดที่เชื่อมต่อกับซ็อกเก็ต ssh เนื่องจากเซสชัน ssh จะไม่ปิดตราบใดที่รีโมตบางกระบวนการเปิดซ็อกเก็ต หากคุณไม่สนใจเอาต์พุตของสคริปต์ (น่าจะเป็นเพราะสคริปต์ดูแลการเขียนไปยังไฟล์บันทึก) ให้เปลี่ยนเส้นทางไปที่/dev/null
(แต่โปรดทราบว่าสิ่งนี้จะซ่อนข้อผิดพลาดเช่นไม่สามารถเริ่มสคริปต์)
การใช้nohup
ไม่มีผลประโยชน์ที่นี่ nohup
จัดเรียงโปรแกรมที่รันไม่ให้รับสัญญาณ HUP หากเทอร์มินัลการควบคุมของโปรแกรมหายไป แต่ที่นี่ไม่มีเทอร์มินัลในตอนแรกดังนั้นจึงไม่มีอะไรจะส่ง SIGHUP ไปยังกระบวนการออกจากสีน้ำเงิน นอกจากนี้จะnohup
เปลี่ยนเส้นทางเอาต์พุตมาตรฐานและข้อผิดพลาดมาตรฐาน (แต่ไม่ใช่อินพุตมาตรฐาน) ไปยังไฟล์ แต่เฉพาะในกรณีที่พวกเขาเชื่อมต่อกับเทอร์มินัล
กำลังแยกออกจากเทอร์มินัล
aaron@localpc$ ssh root@remoteserver
root@remoteserver# nohup /root/backup.sh </dev/null &
nohup: appending output to `nohup.out'
[1] 12345
root@remoteserver# exit
aaron@localpc$
ใช้nohup
เพื่อแยกสคริปต์ออกจากเทอร์มินัลการควบคุมเพื่อไม่ให้ได้รับSIGHUPเมื่อเทอร์มินัลหายไป nohup
เปลี่ยนเส้นทางเอาต์พุตมาตรฐานและข้อผิดพลาดมาตรฐานไปยังไฟล์ที่เรียกว่าnohup.out
หากเชื่อมต่อกับเทอร์มินัล คุณต้องดูแลอินพุตมาตรฐานด้วยตัวเอง
การรักษาสถานีระยะไกล
หากคุณต้องการที่จะให้คำสั่งที่ทำงานอยู่ในสถานีระยะไกล แต่ไม่ได้มันติดอยู่กับเซสชั่น SSH รันใน Multiplexer ขั้วเช่นหน้าจอหรือTmux
ssh root@remoteserver 'screen -S backup -d -m /root/backup.sh'
คุณสามารถเชื่อมต่อกับเทอร์มินัลในภายหลังซึ่งสคริปต์กำลังทำงานอยู่โดยเรียกใช้screen -S backup -rd
เป็นรูทบนเครื่องนั้น
อัตโนมัติคำสั่งระยะไกลหนึ่ง
เพื่อความปลอดภัยที่ดีขึ้นเล็กน้อยอย่าเปิดการเข้าสู่ระบบรากระยะไกลโดยตรงอย่างกว้างขวางเกินไป /root/.ssh/authorized_keys
สร้างวัตถุประสงค์พิเศษคู่ที่สำคัญและให้คำสั่งบังคับใน เนื้อหาของไฟล์กุญแจสาธารณะคือAAAA…== wibble@example.com
; เพิ่มรายการของตัวเลือกที่คั่นด้วยเครื่องหมายจุลภาครวมถึงcommand="…"
ที่ระบุว่าคีย์สามารถใช้เพื่อดำเนินการคำสั่งเฉพาะนี้เท่านั้น ตรวจสอบให้แน่ใจว่าได้เก็บตัวเลือกและปุ่มทั้งหมดไว้ในหนึ่งบรรทัด
command="/root/backup.sh </dev/null >/dev/null 2>/dev/null &",no-port-forwarding,no-agent-forwarding,no-x11-forwarding,no-pty,no-user-rc AAAA…== wibble@example.com