Ви можете передати команду як аргумент 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
перемикача (потрібно, якщо вам потрібно ввести корінний пароль):
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
до всіх команд, які потрібно запустити як root, найімовірніше, найпростіший спосіб запустити команди як root на сервері. Додавання NOPASSWD
правила для вашого користувача в /etc/sudoers
зробить процес ще більш плавним.
Я сподіваюся, що це допомагає :-)