SSH

SSH (Secure Shell) - выполнение команд на Ваших серверах по средствам протокола SSH.

В этом разделе описывается способ настройки транспорта SSH.

Настройки

Хост (host)
адрес сервера SSH, например: root@1.2.3.4
port
порт SSH сервера. По-умолчанию 22
timeout
Таймаут SSH сервера в секундах. По-умолчанию 10 сек
Ключ (key_id)
SSH ключ для доступа на сервер
Команда (cmd)
Произвольная shell команда. Используется как команда по-умолчанию и для тестирования работы SSH. Реальную команду удобно прописывать в События услуги
proxy_jump
Если ваш сервер находится внутри другого сервера (виртуальный сервер: OpenVZ, LXC, KVM…), то эту настройку можно использовать для указания реального, внешнего сервера. Сначала SHM подключиться к этому серверу, после чего, подключиться к Хост (host).

Использование в шаблонах

SSH-транспорт доступен из шаблонов через объект ssh. Это позволяет выполнять команды на сервере прямо внутри шаблона и использовать вывод в тексте письма, отчёте или любом другом шаблоне.

Выполнение команды

{{ ret = ssh.exec( server_id = 26, cmd = "cat /etc/os-release" ) }}

Аргументы exec:

Аргумент Описание
server_id ID сервера из настроек SHM. Хост, порт и ключ подставляются автоматически
host Адрес сервера в формате user@host, например root@1.2.3.4. Можно не указывать, если задан server_id
port Порт SSH. По умолчанию 22
key_id ID SSH-ключа для подключения. Подставляется автоматически при указании server_id
cmd Команда, которую нужно выполнить на сервере
template_id ID шаблона команды (альтернатива cmd)
stdin Данные, которые будут переданы на стандартный ввод команды
shell Интерпретатор команды. По умолчанию bash -c для cmd и bash для template_id
stderr_to_stdout Перенаправить stderr в stdout. По умолчанию 1 (включено)
proxy_jump Адрес промежуточного сервера для подключения через него (ProxyJump)
pipeline_id ID существующего pipeline для записи вывода. Создаётся автоматически, если не указан
timeout Таймаут в секундах (по умолчанию 10)

Метод exec возвращает массив [status, info], где info.pipeline_id — идентификатор лога выполнения.

Проверка успешности выполнения

После вызова exec можно проверить, завершилась ли команда успешно:

{{ ret = ssh.exec( server_id = 26, cmd = "systemctl restart nginx" ) }}
{{ IF ssh.is_success }}
  Команда выполнена успешно
{{ ELSE }}
  Ошибка выполнения команды
{{ END }}

ssh.is_success возвращает 1 если код возврата команды равен 0, иначе 0.

Получение вывода команды

После вызова exec вывод команды доступен через ssh.output:

{{ ret = ssh.exec( server_id = 26, cmd = "cat /etc/os-release" ) }}
{{ ssh.output }}

Метод output возвращает чистый вывод команды — без служебных строк подключения и завершения.

Если нужен доступ к логу по pipeline_id (например, из другого шаблона):

{{ logs = ssh.logs( ret.1.pipeline_id ) }}
{{ logs }}