[comment]: # ({96aacdf0-26d9bc44})
# 11 SSH agent

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

[comment]: # ({d9efe87e-4cdff2c1})
### Visão geral

As verificações SSH são realizadas como monitoramento sem agent. O agent Zabbix não é necessário para verificações SSH.

Para realizar verificações SSH, o server Zabbix deve ser inicialmente
[configurado](/manual/installation/install/sources#configure-the-sources) com suporte a SSH2
(libssh ou libssh2). Veja também:
[Requisitos](/manual/installation/requirements#serverproxy).

::: noteimportant
A partir do RHEL 8, apenas o libssh é suportado. Para outras distribuições, o libssh é recomendado em vez do libssh2.
:::

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

[comment]: # ({76b2e481-5d32b87c})
### Configuração

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

[comment]: # ({69e9c4a5-753f5c30})
##### Autenticação por frase secreta

As verificações SSH fornecem dois métodos de autenticação - um par usuário/senha e baseado em arquivo de chave.

Se você não pretende usar chaves, nenhuma configuração adicional é necessária, além de vincular libssh ou libssh2 ao Zabbix, se você estiver compilando a partir do código-fonte.

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

[comment]: # ({90e14e64-44fd07da})
##### Autenticação por arquivo de chave

Para usar autenticação baseada em chave para itens SSH, são necessárias algumas alterações na configuração do server.

Abra o arquivo de configuração do Zabbix server
([*zabbix\_server.conf*](/manual/concepts/server/server_params)) como `root`
e procure a seguinte linha:

```ini
# SSHKeyLocation=
```

Remova o comentário e defina o caminho completo para a pasta onde as chaves pública e privada
serão armazenadas:

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

Salve o arquivo e reinicie o Zabbix server em seguida.

O caminho */home/zabbix* aqui é o diretório home da conta de usuário *zabbix*,
e *.ssh* é um diretório onde, por padrão, as chaves pública e privada serão
geradas por um comando [ssh-keygen](http://en.wikipedia.org/wiki/Ssh-keygen)
dentro do diretório home.

Normalmente, os pacotes de instalação do Zabbix server de diferentes distribuições
de SO criam a conta de usuário *zabbix* com um diretório home em outro local,
por exemplo, */var/lib/zabbix* (como ocorre com contas de sistema).

Antes de gerar as chaves, você pode realocar o diretório home
para */home/zabbix*, para que ele
corresponda ao parâmetro de configuração `SSHKeyLocation` do Zabbix server
mencionado acima.

::: noteclassic
As etapas a seguir podem ser ignoradas se a conta *zabbix* tiver sido adicionada manualmente
de acordo com a [seção de instalação](/manual/installation/install/sources#create-user-account).
Nesse caso, o diretório home da conta *zabbix* provavelmente já é
*/home/zabbix*.
:::

Para alterar o diretório home da conta de usuário *zabbix*, todos os
processos em execução que o estejam usando precisam ser interrompidos:

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

Para alterar o local do diretório home com tentativa de movê-lo (se ele
existir), o seguinte comando deve ser executado:

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

Também é possível que um diretório home não tenha existido no local
antigo, então ele deve ser criado no novo local. Uma tentativa segura de fazer isso é:

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

Para garantir que tudo esteja seguro, comandos adicionais podem ser executados para
definir permissões no diretório home:

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

Os processos que foram interrompidos anteriormente agora podem ser iniciados novamente:

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

Agora, as etapas para gerar as chaves pública e privada podem ser executadas
com os seguintes comandos (para melhor legibilidade, os prompts de comando foram comentados):

```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
As chaves pública e privada (*id\_rsa.pub* e *id\_rsa*)
foram geradas por padrão no diretório */home/zabbix/.ssh*,
que corresponde ao parâmetro de configuração `SSHKeyLocation` do Zabbix server.
:::

::: noteimportant
Tipos de chave diferentes de "rsa" podem ser suportados pela
ferramenta ssh-keygen e por servidores SSH, mas talvez não sejam suportados pela
libssh2 usada pelo Zabbix.
:::

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

[comment]: # ({b84f1792-7e6b0273})
##### Formulário de configuração do Shell

Esta etapa deve ser executada apenas uma vez para cada host que será monitorado por verificações SSH.

Usando os seguintes comandos, o arquivo de chave **pública** pode ser instalado em um host remoto *10.10.10.10*, para que as verificações SSH possam ser realizadas com uma conta *root* (para melhor legibilidade, os prompts de comando estão comentados):

```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:
<Enter root password>
# Now try logging into the machine, with "ssh 'root@10.10.10.10'",
# and check to make sure that only the key(s) you wanted were added.
```

Agora é possível verificar o login SSH usando a chave privada padrão (*/home/zabbix/.ssh/id\_rsa*) para a conta de usuário *zabbix*:

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

Se o login for bem-sucedido, a parte de configuração no shell estará concluída e a sessão SSH remota pode ser encerrada.

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

[comment]: # ({6dca8e7a-fe23daa8})
##### Configuração de item

O(s) comando(s) real(is) a ser(em) executado(s) deve(m) ser colocado(s) no campo *Executed script*
na configuração do item.
Vários comandos podem ser executados um após o outro, colocando-os em uma
nova linha. Nesse caso, os valores retornados também serão formatados em várias linhas.

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

Todos os campos de entrada obrigatórios são marcados com um asterisco vermelho.

Os campos que exigem informações específicas para itens SSH são:

|Parâmetro|Descrição|Comentários|
|--|------|------|
|*Type*|Selecione **SSH agent** aqui.| |
|*Key*|Chave de item única (por host) no formato **ssh.run\[descrição curta exclusiva,<ip>,<port>,<encoding>,<ssh options>,<subsystem>\]**|**descrição curta exclusiva** é obrigatória e deve ser exclusiva para cada item SSH por host.<br><br>A porta padrão é 22, não a porta especificada na interface à qual este item está atribuído.<br><br>**ssh options** permite passar opções SSH adicionais no formato *key1=value1;key2=value2,value3*. Vários valores para uma chave podem ser passados separados por vírgula (nesse caso, o parâmetro deve estar [entre aspas](/manual/config/items/item/key#parameter--quoted-string)); várias chaves de opção podem ser passadas separadas por ponto e vírgula.<br><br>As seguintes chaves de opção são suportadas: `KexAlgorithms`, `HostkeyAlgorithms`, `Ciphers`, `MACs`, `PubkeyAcceptedKeyTypes`. O suporte à chave e ao valor da opção depende da biblioteca SSH (por exemplo, `PubkeyAcceptedKeyTypes` é suportado apenas com libssh); se uma opção não for suportada, um erro será retornado e o item se tornará não suportado.<br><br>Observe que o sinal "+" para acrescentar configurações de cifra e "!" para desabilitar configurações de cifra específicas (como em GnuTLS e OpenSSL) não são suportados.<br><br>Exemplos:<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** permite passar um subsistema SSH, limitando a conexão SSH a operações específicas permitidas pelo subsistema (por exemplo, transferências de arquivos usando SFTP ou gerenciamento de dispositivos de rede usando NETCONF). Observe que o uso de um subsistema também pode exigir o uso de sintaxe de script específica no parâmetro *Executed script*.<br><br>Exemplos:<br>=> `ssh.run[SFTPBackup,192.0.2.18,,,,sftp]`<br>=> `ssh.run[Cisco1234,192.0.2.18,,,,netconf]`|
|*Authentication method*|Um entre "Password" ou "Public key".| |
|*User name*|Nome de usuário (até 255 caracteres) para autenticação no host remoto. Obrigatório.| |
|*Public key file*|Nome do arquivo de chave pública se *Authentication method* for "Public key". Obrigatório.|Exemplo: *id\_rsa.pub* - nome padrão do arquivo de chave pública gerado por um comando [ssh-keygen](http://en.wikipedia.org/wiki/Ssh-keygen).|
|*Private key file*|Nome do arquivo de chave privada se *Authentication method* for "Public key". Obrigatório.|Exemplo: *id\_rsa* - nome padrão do arquivo de chave privada.|
|*Password* ou<br>*Key passphrase*|Senha (até 255 caracteres) para autenticação ou<br>Frase-senha **se** ela tiver sido usada para a chave privada.|Deixe o campo *Key passphrase* vazio se a frase-senha não tiver sido usada.<br>Veja também [problemas conhecidos](/manual/installation/known_issues#ssh-checks) sobre o uso de frase-senha.|
|*Executed script*|Comando(s) de shell executado(s) usando sessão remota SSH.|O valor de retorno do(s) comando(s) de shell executado(s) é limitado a 16MB (incluindo espaços em branco à direita que são truncados); os [limites do banco de dados](/manual/config/items/item#item-data-limits) também se aplicam.<br><br>Observe que a biblioteca libssh2 pode truncar scripts executáveis para \~32kB.<br><br>Exemplos:<br>`date +%s`<br>`systemctl status mysql-server`<br>`ps auxww \| grep httpd \| wc -l`<br><br>Exemplo (para o subsistema NETCONF):<br>`<rpc>`<br>`<get-software-information/>`<br>`</rpc>`<br>`]]>]]>`<br>`<rpc>`<br>`<close-session/>`<br>`</rpc>`<br>`]]>]]>`|

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