Я хочу выполнить команду на ssh-сервере, но эта команда определяется сценарием на моей локальной машине. Как я делаю это?
Пример для ясности:
Я хочу записать сценарий здесь (foo.sh), который берет аргумент. Если я работаю ./foo.sh 0
это должно так или иначе отправить сигнал завершения работы на машину сервера, но если я работаю ./foo.sh 1
это должно отправить сигнал перезапуска.
Я знаю, как вручную войти в систему через ssh, и я уже установил ssh-ключи для пропуска паролей, но я не знаю, как автоматизировать процедуру со сценарием.
Как прокомментированный Oli, можно сказать SSH отправлять команды. Вы могли изменить свой сценарий так, чтобы, если Ваш аргумент командной строки равняется 1, он отправил ssh user@server "shutdown -h now"
. Следует иметь в виду, что необходимо будет быть суперпользователем на другой машине для завершения работы его.
Править: Вместо того, чтобы использовать корень, как предлагается в помещенных комментариях user
в sudoers файл как способность закрыть машину без пароля.
Можно передать команду (или список команд, разделенных ;
) к соединению SSH как это:
ssh user@server-address "./foo 1"
Если у Вас есть локальный сценарий, это производит 0
или 1
, можно упростить вещи далее:
ssh user@server-address "./foo `/path/to/your/script`"
Код в обратных галочках выполняется перед чем-либо еще, и его вывод помещается в строку динамично.
Можно использовать runoverssh:
sudo apt install runoverssh
runoverssh -n -s localscript.sh user host
-n
будет использовать аутентификацию по умолчанию SSH (Ваши ключи)
-s
запускает локальный скрипт удаленно