Вы можете передать команду в качестве аргумента 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
сделает этот процесс еще более плавным.
Надеюсь, это поможет :-)