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 }}