[comment]: # ({96aacdf0-26d9bc44})
# 11. SSH агент

[comment]: # ({/96aacdf0-26d9bc44})

[comment]: # ({d9efe87e-4cdff2c1})
### Обзор

Проверки SSH выполняются как мониторинг без агента. Для проверок SSH агент Zabbix не требуется.

Для выполнения проверок SSH сервер Zabbix должен быть изначально
[настроен](/manual/installation/install/sources#configure-the-sources) с поддержкой SSH2
(libssh или libssh2). См. также:
[Требования](/manual/installation/requirements#serverproxy).

::: noteimportant
Начиная с RHEL 8 поддерживается только libssh. Для других дистрибутивов рекомендуется использовать libssh вместо libssh2.
:::

[comment]: # ({/d9efe87e-4cdff2c1})

[comment]: # ({76b2e481-5d32b87c})
### Настройка

[comment]: # ({/76b2e481-5d32b87c})

[comment]: # ({69e9c4a5-753f5c30})
##### Аутентификация по паролю

Проверки SSH предоставляют два метода аутентификации: пара логин пользователя/пароль и на основе файла ключа.

Если вы не собираетесь использовать ключи, то (помимо привязки библиотеки libssh2/libssh к Zabbix при компиляции из исходных кодов) никакой дополнительной настройки не требуется.

[comment]: # ({/69e9c4a5-753f5c30})

[comment]: # ({90e14e64-44fd07da})
##### Аутентификация с помощью файла ключа

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

Откройте файл конфигурации сервера Zabbix
([*zabbix\_server.conf*](/manual/concepts/server/server_params)) от имени `root`
и найдите следующую строку:

```ini
# SSHKeyLocation=
```

Раскомментируйте ее и укажите полный путь к папке, где будут находиться открытый и закрытый ключи:

```ini
SSHKeyLocation=/home/zabbix/.ssh
```

Сохраните файл и затем перезапустите сервер Zabbix.

Путь */home/zabbix* здесь является домашним каталогом учетной записи пользователя *zabbix*,
а *.ssh* — это каталог, в котором по умолчанию будут создаваться открытый и закрытый ключи
с помощью команды [ssh-keygen](http://en.wikipedia.org/wiki/Ssh-keygen)
внутри домашнего каталога.

Обычно пакеты установки сервера Zabbix из разных дистрибутивов ОС
создают учетную запись пользователя *zabbix* с домашним каталогом в другом месте,
например, */var/lib/zabbix* (как для системных учетных записей).

Перед генерацией ключей можно переназначить домашний
каталог на */home/zabbix*, чтобы он
соответствовал параметру конфигурации `SSHKeyLocation` сервера Zabbix,
упомянутому выше.

::: noteclassic
Следующие шаги можно пропустить, если учетная запись *zabbix* была добавлена вручную
в соответствии с [разделом установки](/manual/installation/install/sources#create-user-account).
В таком случае домашний каталог учетной записи *zabbix* скорее всего уже
*/home/zabbix*.
:::

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

```bash
systemctl stop zabbix-agent
systemctl stop zabbix-server
```

Чтобы изменить расположение домашнего каталога с попыткой перенести его (если он
существует), следует выполнить команду:

```bash
usermod -m -d /home/zabbix zabbix
```

Также возможно, что в старом
расположении домашний каталог не существовал, поэтому его следует создать в новом месте. Безопасная попытка сделать это:

```bash
test -d /home/zabbix || mkdir /home/zabbix
```

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

```bash
chown zabbix:zabbix /home/zabbix
chmod 700 /home/zabbix
```

Ранее остановленные процессы теперь можно снова запустить:

```bash
systemctl start zabbix-agent
systemctl start zabbix-server
```

Теперь можно выполнить шаги по генерации открытого и закрытого ключей
с помощью следующих команд (для лучшей читаемости приглашения командной строки опущены):

```bash
sudo -u zabbix ssh-keygen -t rsa
# Generating public/private rsa key pair.
# Enter file in which to save the key (/home/zabbix/.ssh/id_rsa):
/home/zabbix/.ssh/id_rsa
# Enter passphrase (empty for no passphrase):
<Leave empty>
# Enter same passphrase again: 
<Leave empty>
# Your identification has been saved in /home/zabbix/.ssh/id_rsa.
# Your public key has been saved in /home/zabbix/.ssh/id_rsa.pub.
# The key fingerprint is:
# 90:af:e4:c7:e3:f0:2e:5a:8d:ab:48:a2:0c:92:30:b9 zabbix@it0
# The key's randomart image is:
# +--[ RSA 2048]----+
# |                 |
# |       .         |
# |      o          |
# | .     o         |
# |+     . S        |
# |.+   o =         |
# |E .   * =        |
# |=o . ..* .       |
# |... oo.o+        |
# +-----------------+
```

::: noteclassic
Открытый и закрытый ключи (*id\_rsa.pub* и *id\_rsa*)
по умолчанию были созданы в каталоге */home/zabbix/.ssh*,
что соответствует параметру конфигурации `SSHKeyLocation` сервера Zabbix.
:::

::: noteimportant
Типы ключей, отличные от "rsa", могут поддерживаться
утилитой ssh-keygen и SSH-серверами, но могут не поддерживаться
libssh2, используемой Zabbix.
:::

[comment]: # ({/90e14e64-44fd07da})

[comment]: # ({b84f1792-7e6b0273})
##### Диалог настройки командной строки

Этот шаг необходимо выполнить только один раз для каждого хоста, который будет наблюдаться с использованием SSH проверок.

При использовании следующей команды файл **открытого** ключа может быть установлен на удалённый хост *10.10.10.10*, для того чтобы потом можно было выполнять SSH проверки при помощи аккаунта *root* (для лучшей читабельности подсказки команды закомментированы):

```bash
sudo -u zabbix ssh-copy-id root@10.10.10.10
# The authenticity of host '10.10.10.10 (10.10.10.10)' can't be established.
# RSA key fingerprint is 38:ba:f2:a4:b5:d9:8f:52:00:09:f7:1f:75:cc:0b:46.
# Are you sure you want to continue connecting (yes/no)?
yes
# Warning: Permanently added '10.10.10.10' (RSA) to the list of known hosts.
# root@10.10.10.10's password:
<введите пароль пользователя root>
# Теперь попытайтесь зайти на машину с помощью "ssh 'root@10.10.10.10'",
# и проверьте, чтобы убедиться, что мы не добавили лишние нежелательные ключи.
```

Теперь можно проверить вход по SSH с использованием закрытого ключа по умолчанию (*/home/zabbix/.ssh/id\_rsa*) учётной записи пользователя *zabbix*:

```bash
sudo -u zabbix ssh root@10.10.10.10
```

Если вход успешен, то часть настройки в командной строке завершена и удалённую сессию по SSH можно закрыть.

[comment]: # ({/b84f1792-7e6b0273})

[comment]: # ({6dca8e7a-fe23daa8})
##### Конфигурация элемента данных

Фактические команды, которые необходимо выполнить, должны быть указаны в поле *Executed script* в конфигурации элемента данных.
Несколько команд можно выполнять одну за другой, размещая их на новой строке. В этом случае возвращаемые значения также будут отформатированы как многострочные.

![](../../../../../assets/en/manual/config/items/itemtypes/ssh_item.png){width="600"}

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

Поля, для которых требуется конкретная информация для элементов данных SSH, следующие:

|Parameter|Description|Comments|
|--|------|------|
|*Type*|Выберите здесь **SSH agent**.| |
|*Key*|Уникальный ключ элемента данных (для каждого узла сети) в формате **ssh.run\[unique short description,<ip>,<port>,<encoding>,<ssh options>,<subsystem>\]**|**unique short description** обязательно и должно быть уникальным для каждого элемента данных SSH на каждом узле сети.<br><br>Порт по умолчанию — 22, а не порт, указанный в интерфейсе, к которому назначен этот элемент данных.<br><br>**ssh options** позволяют передавать дополнительные параметры SSH в формате *key1=value1;key2=value2,value3*. Несколько значений для одного ключа можно передавать через запятую (в этом случае параметр должен быть [заключен в кавычки](/manual/config/items/item/key#parameter--quoted-string)); несколько ключей параметров можно передавать через точку с запятой.<br><br>Поддерживаются следующие ключи параметров: `KexAlgorithms`, `HostkeyAlgorithms`, `Ciphers`, `MACs`, `PubkeyAcceptedKeyTypes`. Поддержка ключа и значения зависит от библиотеки SSH (например, `PubkeyAcceptedKeyTypes` поддерживается только в libssh); если параметр не поддерживается, будет возвращена ошибка, и элемент данных станет неподдерживаемым.<br><br>Обратите внимание, что знак "+" для добавления настроек шифров и "!" для отключения определенных настроек шифров (как в GnuTLS и OpenSSL) не поддерживается.<br><br>Примеры:<br>=> `ssh.run[KexAlgorithms,127.0.0.1,,,Ciphers=aes128-ctr]`<br>=> `ssh.run[KexAlgorithms,,,,"KexAlgorithms=diffie-hellman-group1-sha1;HostkeyAlgorithms=ssh-rsa,ssh-dss,ecdh-sha2-nistp256"]`<br>=> `ssh.run[PubkeyAcceptedKeyTypes,127.0.0.1,,,PubkeyAcceptedKeyTypes=ssh-rsa]`<br><br>**subsystem** позволяет передать SSH-подсистему, ограничивая SSH-подключение конкретными операциями, разрешенными этой подсистемой (например, передачей файлов с использованием SFTP или управлением сетевым устройством с использованием NETCONF). Обратите внимание, что использование подсистемы также может потребовать применения определенного синтаксиса сценария в параметре *Executed script*.<br><br>Примеры:<br>=> `ssh.run[SFTPBackup,192.0.2.18,,,,sftp]`<br>=> `ssh.run[Cisco1234,192.0.2.18,,,,netconf]`|
|*Authentication method*|Один из вариантов: "Password" или "Public key".| |
|*User name*|Имя пользователя (до 255 символов) для аутентификации на удаленном узле сети. Обязательно.| |
|*Public key file*|Имя файла открытого ключа, если *Authentication method* — "Public key". Обязательно.|Пример: *id\_rsa.pub* — имя файла открытого ключа по умолчанию, создаваемого командой [ssh-keygen](http://en.wikipedia.org/wiki/Ssh-keygen).|
|*Private key file*|Имя файла закрытого ключа, если *Authentication method* — "Public key". Обязательно.|Пример: *id\_rsa* — имя файла закрытого ключа по умолчанию.|
|*Password* or<br>*Key passphrase*|Пароль (до 255 символов) для аутентификации или<br>парольная фраза **если** она использовалась для закрытого ключа.|Оставьте поле *Key passphrase* пустым, если парольная фраза не использовалась.<br>См. также [известные проблемы](/manual/installation/known_issues#ssh-checks), связанные с использованием парольной фразы.|
|*Executed script*|Выполняемая команда или команды оболочки через удаленный сеанс SSH.|Возвращаемое значение выполненной команды или команд ограничено 16 МБ (включая завершающие пробелы, которые будут обрезаны); также действуют [ограничения базы данных](/manual/config/items/item#item-data-limits).<br><br>Обратите внимание, что библиотека libssh2 может обрезать исполняемые сценарии примерно до \~32 КБ.<br><br>Примеры:<br>`date +%s`<br>`systemctl status mysql-server`<br>`ps auxww \| grep httpd \| wc -l`<br><br>Пример (для подсистемы NETCONF):<br>`<rpc>`<br>`<get-software-information/>`<br>`</rpc>`<br>`]]>]]>`<br>`<rpc>`<br>`<close-session/>`<br>`</rpc>`<br>`]]>]]>`|

[comment]: # ({/6dca8e7a-fe23daa8})
