Bạn có thể truyền một lệnh làm đối số cho SSH để chỉ chạy lệnh đó trên máy chủ, rồi thoát:
ssh user@host "command to run"
Điều này cũng hoạt động cho một danh sách nhiều lệnh:
ssh user@host "command1; command2; command3"
Hay cách khác:
ssh user@host "
command1
command2
command3
"
Như những người dùng khác đã chỉ ra trước tôi, chạy su
trên máy chủ sẽ khởi chạy một shell mới thay vì thực thi các lệnh tiếp theo trong tập lệnh dưới dạng root. Những gì bạn cần làm là sử dụng một trong hai sudo
hoặc su -c
buộc phân bổ TTY cho SSH bằng công -t
tắc (bắt buộc nếu bạn cần nhập mật khẩu gốc):
ssh -t user@host 'su - -c "command"'
ssh -t user@host 'sudo command'
Tóm lại, một cách để hoàn thành những gì bạn muốn làm, sẽ là:
#!/bin/bash
ssh -t user@172.1.1.101 "
sudo some_command
sudo service server_instance stop
sudo some_other_command
"
Vì sudo
thường nhớ mức ủy quyền của bạn trong vài phút trước khi yêu cầu nhập lại mật khẩu gốc, chỉ cần thêm vào sudo
tất cả các lệnh bạn cần để chạy bằng root có thể là cách dễ nhất để chạy các lệnh như root trên máy chủ. Thêm một NOPASSWD
quy tắc cho người dùng của bạn vào /etc/sudoers
sẽ làm cho quá trình thậm chí mượt mà hơn.
Tôi hi vọng cái này giúp được :-)