คุณสามารถส่งคำสั่งเป็นอาร์กิวเมนต์ไปยัง SSH เพื่อเรียกใช้คำสั่งนั้นบนเซิร์ฟเวอร์แล้วออก:
ssh user@host "command to run"
นอกจากนี้ยังใช้งานได้กับรายการคำสั่งหลายคำสั่ง:
ssh user@host "command1; command2; command3"
หรืออีกทางหนึ่ง:
ssh user@host "
command1
command2
command3
"
อย่างที่ผู้ใช้คนอื่น ๆ ชี้ให้เห็นก่อนหน้าฉันการรันsu
บนเซิร์ฟเวอร์จะเปิดเชลล์ใหม่แทนการรันคำสั่งที่ตามมาในสคริปต์ในฐานะรูท สิ่งที่คุณต้องทำคือใช้อย่างใดอย่างหนึ่งsudo
หรือsu -c
และบังคับให้การจัดสรร TTY ไปยัง SSH ด้วย-t
สวิตช์ (จำเป็นถ้าคุณต้องการป้อนรหัสผ่านรูท):
ssh -t user@host 'su - -c "command"'
ssh -t user@host 'sudo command'
วิธีสรุปสิ่งที่คุณต้องการทำคือ:
#!/bin/bash
ssh -t user@172.1.1.101 "
sudo some_command
sudo service server_instance stop
sudo some_other_command
"
เนื่องจากsudo
โดยทั่วไปจะจดจำระดับการอนุญาตของคุณเป็นเวลาสองสามนาทีก่อนที่จะขอรหัสผ่านรูทอีกครั้งเพียงแค่sudo
เตรียมคำสั่งทั้งหมดที่คุณต้องใช้เนื่องจากรูทน่าจะเป็นวิธีที่ง่ายที่สุดในการรันคำสั่งในฐานะรูทบนเซิร์ฟเวอร์ การเพิ่มNOPASSWD
กฎสำหรับผู้ใช้ของคุณ/etc/sudoers
จะทำให้กระบวนการราบรื่นขึ้น
ฉันหวังว่านี่จะช่วยได้ :-)