Как выполнять удаленные команды SSH в фоновом режиме

Для эффективного выполнения задач вам может понадобиться выполнять удаленные команды на сервере по SSH, одновременно запуская другие процессы на локальной машине. Хотя команда 'nohup' и добавление & к команде позволяют запускать фоновые процессы локально, эти методы не работают так, как ожидается, для удаленных SSH-команд.

Проблема заключается в том, что даже если команда выполняется в фоновом режиме на удаленном сервере, она продолжает блокировать SSH-сессию, освобождая ее только по завершении выполнения команды. Такое поведение проблематично для автоматических сценариев, которые требуют активного соединения, но не могут выполнить команду в фоновом режиме.

Как реализовать беспарольную аутентификацию SSH

Чтобы выполнить удаленную команду SSH в фоновом режиме без этого ограничения, выполните следующие действия:

  1. Запретите SSH блокировать ввод, перенаправив вывод в /dev/null.
  2. Переведите сеанс клиента SSH в фоновый режим.

Эти задачи можно решить с помощью опций -n и -f в SSH-клиенте.

  • -n - Перенаправляет stdin из /dev/null (фактически, предотвращает чтение из stdin). Это необходимо использовать, когда ssh работает в фоновом режиме. Обычный трюк заключается в том, чтобы использовать его для запуска X11-программ на удаленной машине. Например, ssh -n shadows.cs.hut.fi emacs & запустит anemacs на shadows.cs.hut.fi, а X11-соединение будет автоматически передано по зашифрованному каналу. Программа ssh будет переведена в фоновый режим. (Это не работает, если ssh должен запросить пароль или кодовую фразу; см. также опцию -f).
  • -f - Запрашивает переход ssh в фоновый режим непосредственно перед выполнением команды. Это полезно, если ssh собирается запрашивать пароли или парольные фразы, но пользователь хочет, чтобы это происходило в фоновом режиме. Это подразумевает использование -n. Рекомендуемый способ запуска X11-программ на удаленном сайте - это что-то вроде ssh -f host xterm.

Пример команды SSH, которая будет выполняться в фоновом режиме на удаленном сервере, позволяя при этом немедленно завершить сеанс SSH:

Упрощенная версия, как в примере ниже, не подавляет вывод, но тоже будет работать:

Понравилась статья? Поделиться с друзьями:
Добавить комментарий