Możesz przekazać polecenie jako argument do SSH, aby po prostu uruchomić to polecenie na serwerze, a następnie wyjść:
ssh user@host "command to run"
Działa to również w przypadku listy wielu poleceń:
ssh user@host "command1; command2; command3"
Lub alternatywnie:
ssh user@host "
command1
command2
command3
"
Jak zauważyli wcześniej inni użytkownicy, uruchomienie su
na serwerze uruchomi nową powłokę zamiast wykonywać kolejne polecenia w skrypcie jako root. Co trzeba zrobić, to użyć jednej sudo
lub su -c
i alokacja siły TTY do SSH z -t
przełącznikiem (wymagany, jeśli trzeba wpisać hasło roota):
ssh -t user@host 'su - -c "command"'
ssh -t user@host 'sudo command'
Podsumowując, jednym ze sposobów osiągnięcia tego, co chcesz zrobić, byłoby:
#!/bin/bash
ssh -t user@172.1.1.101 "
sudo some_command
sudo service server_instance stop
sudo some_other_command
"
Ponieważ sudo
zazwyczaj zapamiętuje poziom autoryzacji przez kilka minut, zanim ponownie poprosisz o hasło roota, po prostu przygotowując się sudo
do wszystkich poleceń, które musisz uruchomić jako root, jest to prawdopodobnie najłatwiejszy sposób uruchamiania poleceń jako root na serwerze. Dodanie NOPASSWD
reguły dla użytkownika /etc/sudoers
sprawi, że proces będzie jeszcze płynniejszy.
Mam nadzieję, że to pomoże :-)