Вы можете передать команду в качестве аргумента SSH, чтобы просто запустить эту команду на сервере и затем выйти:
ssh user@host "command to run"
Это также работает для списка нескольких команд:
ssh user@host "command1; command2; command3"
Или в качестве альтернативы:
ssh user@host "
command1
command2
command3
"
Как уже указывали другие пользователи, при запуске suна сервере будет запущена новая оболочка вместо выполнения последующих команд в сценарии от имени пользователя root. Что вам нужно сделать, это использовать либо sudoили su -c, и принудительно назначить TTY SSH с -tкоммутатором (требуется, если вам нужно ввести пароль root):
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как правило, запоминает уровень авторизации на несколько минут, прежде чем снова запрашивать пароль пользователя root, простое добавление sudoко всем командам, которые необходимо выполнить от имени пользователя root, является, вероятно, самым простым способом запуска команд от имени пользователя root на сервере. Добавление NOPASSWDправила для вашего пользователя /etc/sudoersсделает этот процесс еще более плавным.
Надеюсь, это поможет :-)