Написание скрипта, который входит и выходит из SSH-сервера

Написание скрипта, который входит и выходит из SSH-сервера

Для этого объяснения,машинамой ноутбук, и я использую его для подключения к удаленному серверу, который я буду называтьимя сервера.

Процедуру можно описать следующим образом:

  1. Я подключаюсь к серверуимя серверас sshизмашина
  2. Затем я ввожу пароль дляимя сервера
  3. Я что-то компилирую наимя сервера
  4. Я выхожу изимя сервера(с использованием exit)
  5. Затем я перезагружаюсь.имя сервераотмашина
  6. яping имя сервераи затем я жду, пока не получу от него ответ ( pingвывод отображается на консоли)
  7. Я sshвимя сервераснова
  8. Я провожу некоторые проверки.
  9. Наконец, exitяимя серверадля того, чтобы вернуться назадмашина

Чтобы выполнить вышеуказанный рецепт, явручнуювыполните следующие команды измашина:

<machine>$ ssh server_name
insert password for server_name:
<server_name>$ cd /some/path/
<server_name>$ make clean > /dev/null
<server_name>$ make > /dev/null
<server_name>$ exit
<machine>$ ./my_reboot_script server_name
<machine>$ ping server_name
PING 10.23.22.7 with 56(84) bytes of data.
ping output... (not very interesting)...
ping output... (not very interesting)...
ping output... (not very interesting)...
ping output... (not very interesting)...
^C
<machine>$ ssh server_name
insert password for server_name:
<server_name>$ ./run_some_checks
<server_name>$ exit
<machine>$ echo "Done!"

Пара замечаний по вышесказанному:
- my_reboot_scriptэто всего лишь программа, которая позволяет мне выполнять холодную перезагрузкуимя сервераиз своего собственного сиденья.
- После того, как я сделаю холодную перезагрузкуимя сервера, мне нужно подождать, пока он снова заработает, чтобы я мог снова подключиться к нему с помощью ssh. Для этого я использую ping; он просто используется как указание на то, когдаимя сервераснова готов принимать соединения; Только когда я вижу, что pingвывод наконец появляется на консоли, я прерываю его нажатием Ctrl+C, а затем вхожу sshвимя сервера.

Делать это вручную утомительно и занимает много времени. Поэтому я хочу автоматизировать этот процесс, но есть три трудности:

  1. При подключении кимя сервера, выполнение exitкоманды из оболочки изящно выводит меня из системы и возвращает вмашина. Однако вызов exitиз .shфайла скрипта завершит выполнение скрипта...
  2. Как я могу автоматизировать пароль дляимя серверафаза? Я не хочу вручную вводить пароль, а предоставлю это сделать скрипту; другими словами - я хочу как-то жестко закодировать пароль в скрипте, чтобы он меня этим не беспокоил.
  3. Фаза «ожидания готовности сервера к ssh-подключениям»: как это автоматизировать? То есть, вместо того, чтобы просто pingждать ответа, а затем прерывать его с помощью Ctrl+C, я хочу ping, чтобы скрипт распознавал, что есть ответ отимя сервера, затем соединитесь с ssh. Хотя использование pingздесь может быть не такой уж хорошей идеей, так как ответ на pingне гарантирует, чтоимя сервераготов к прослушиванию sshподключений (из моего опыта с вышеописанным процессом, это занимает еще несколько секунд с момента pingполучения первого ответа на ). Поэтому лучшим подходом может быть, чтобы скрипт продолжал попытки sshв цикле, пока не предоставит доступ (некий механизм активного ожидания или даже цикл, который засыпает и просыпается каждые несколько секунд, чтобы попытаться подключиться).

решение1

Если вы можете перенести данные открытого ключа со своего компьютера в файлы сервера .ssh/authorized_key, вы можете запустить компиляцию с помощью одного sshвызова на сервер, даже не вводя пароль:

ssh someone@$SERVER 'cd /some/path/; make clean > /dev/null; make > /dev/null;'

Вы можете поместить это в цикл в скрипте оболочки, изменяя значение переменной оболочки SERVERкаждый раз. Если вы не против ввода пароля для каждого sshвызова, вам даже не нужны данные открытого ключа на серверах.

Связанный контент