11 SSH agent

Przegląd

Kontrole SSH są wykonywane jako monitorowanie bezagentowe. Agent Zabbix nie jest wymagany do kontroli SSH.

Aby wykonywać kontrole SSH, serwer Zabbix musi być wcześniej skonfigurowany z obsługą SSH2 (libssh lub libssh2). Zobacz także: Wymagania.

Począwszy od RHEL 8, obsługiwany jest tylko libssh. W przypadku innych dystrybucji zalecane jest używanie libssh zamiast libssh2.

Konfiguracja

Uwierzytelnianie za pomocą hasła

Kontrole SSH udostępniają dwie metody uwierzytelniania — parę użytkownik/hasło oraz metodę opartą na pliku klucza.

Jeśli nie zamierzasz używać kluczy, nie jest wymagana żadna dodatkowa konfiguracja, poza podlinkowaniem biblioteki libssh lub libssh2 do Zabbix, jeśli kompilujesz ze źródeł.

Uwierzytelnianie plikiem klucza

Aby używać uwierzytelniania opartego na kluczach dla pozycji SSH, wymagane są określone zmiany w konfiguracji serwera.

Otwórz plik konfiguracyjny serwera Zabbix (zabbix_server.conf) jako root i odszukaj następującą linię:

# SSHKeyLocation=

Odkomentuj ją i ustaw pełną ścieżkę do katalogu, w którym będą znajdować się klucze publiczny i prywatny:

SSHKeyLocation=/home/zabbix/.ssh

Zapisz plik, a następnie uruchom ponownie serwer Zabbix.

Ścieżka /home/zabbix oznacza tutaj katalog domowy konta użytkownika zabbix, a .ssh to katalog, w którym domyślnie będą generowane klucze publiczny i prywatny przez polecenie ssh-keygen wewnątrz katalogu domowego.

Zazwyczaj pakiety instalacyjne serwera Zabbix z różnych dystrybucji systemów operacyjnych tworzą konto użytkownika zabbix z katalogiem domowym w innej lokalizacji, na przykład /var/lib/zabbix (jak w przypadku kont systemowych).

Przed wygenerowaniem kluczy można przenieść katalog domowy do /home/zabbix, tak aby odpowiadał parametrowi konfiguracyjnemu serwera Zabbix SSHKeyLocation, o którym wspomniano powyżej.

Poniższe kroki można pominąć, jeśli konto zabbix zostało dodane ręcznie zgodnie z sekcją instalacji. W takim przypadku katalog domowy konta zabbix najprawdopodobniej już znajduje się w /home/zabbix.

Aby zmienić katalog domowy konta użytkownika zabbix, należy zatrzymać wszystkie procesy robocze, które z niego korzystają:

systemctl stop zabbix-agent
systemctl stop zabbix-server

Aby zmienić lokalizację katalogu domowego z próbą jego przeniesienia (jeśli istnieje), należy wykonać następujące polecenie:

usermod -m -d /home/zabbix zabbix

Możliwe jest również, że katalog domowy nie istniał w starej lokalizacji, więc należy go utworzyć w nowej lokalizacji. Bezpieczna próba wykonania tego wygląda następująco:

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

Aby mieć pewność, że wszystko jest bezpieczne, można dodatkowo wykonać polecenia ustawiające uprawnienia do katalogu domowego:

chown zabbix:zabbix /home/zabbix
chmod 700 /home/zabbix

Wcześniej zatrzymane procesy można teraz ponownie uruchomić:

systemctl start zabbix-agent
systemctl start zabbix-server

Teraz można wykonać kroki generowania kluczy publicznego i prywatnego za pomocą następujących poleceń (dla lepszej czytelności znaki zachęty powłoki zostały zapisane jako komentarze):

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+        |
# +-----------------+

Klucze publiczny i prywatny (id_rsa.pub oraz id_rsa) zostały domyślnie wygenerowane w katalogu /home/zabbix/.ssh, co odpowiada parametrowi konfiguracyjnemu serwera Zabbix SSHKeyLocation.

Typy kluczy inne niż "rsa" mogą być obsługiwane przez narzędzie ssh-keygen i serwery SSH, ale mogą nie być obsługiwane przez libssh2 używane przez Zabbix.

Formularz konfiguracji powłoki

Ten krok należy wykonać tylko raz dla każdego hosta, który będzie monitorowany za pomocą kontroli SSH.

Korzystając z poniższych poleceń, plik klucza publicznego można zainstalować na zdalnym hoście 10.10.10.10, tak aby kontrole SSH mogły być wykonywane przy użyciu konta root (dla lepszej czytelności znaki zachęty wiersza poleceń zostały zakomentowane):

sudo -u zabbix ssh-copy-id [email protected]
# 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.
# [email protected]'s password:
<Enter root password>
# Now try logging into the machine, with "ssh '[email protected]'",
# and check to make sure that only the key(s) you wanted were added.

Teraz można sprawdzić logowanie SSH przy użyciu domyślnego klucza prywatnego (/home/zabbix/.ssh/id_rsa) dla konta użytkownika zabbix:

sudo -u zabbix ssh [email protected]

Jeśli logowanie powiedzie się, część konfiguracyjna w powłoce jest zakończona i zdalną sesję SSH można zamknąć.

Konfiguracja pozycji

Rzeczywiste polecenie(-a) do wykonania należy umieścić w polu Executed script w konfiguracji pozycji. Wiele poleceń można wykonać jedno po drugim, umieszczając je w nowej linii. W takim przypadku zwracane wartości również będą sformatowane jako wielowierszowe.

Wszystkie obowiązkowe pola wejściowe są oznaczone czerwoną gwiazdką.

Pola wymagające określonych informacji dla pozycji SSH to:

Parametr Opis Uwagi
Type Wybierz tutaj SSH agent.
Key Unikalny (dla każdego hosta) klucz pozycji w formacie ssh.run[unikalny krótki opis,<ip>,<port>,<encoding>,<ssh options>,<subsystem>] unikalny krótki opis jest wymagany i powinien być unikalny dla każdej pozycji SSH na danym hoście.

Domyślny port to 22, a nie port określony w interfejsie, do którego przypisana jest ta pozycja.

ssh options pozwalają przekazać dodatkowe opcje SSH w formacie key1=value1;key2=value2,value3. Wiele wartości dla jednego klucza można przekazać, oddzielając je przecinkiem (w takim przypadku parametr musi być quoted); wiele kluczy opcji można przekazać, oddzielając je średnikiem.

Obsługiwane są następujące klucze opcji: KexAlgorithms, HostkeyAlgorithms, Ciphers, MACs, PubkeyAcceptedKeyTypes. Obsługa klucza opcji i wartości zależy od biblioteki SSH (na przykład PubkeyAcceptedKeyTypes jest obsługiwane tylko z libssh); jeśli opcja nie jest obsługiwana, zostanie zwrócony błąd, a pozycja stanie się nieobsługiwana.

Należy pamiętać, że znak "+" do dołączania ustawień szyfrów oraz "!" do wyłączania określonych ustawień szyfrów (jak w GnuTLS i OpenSSL) nie są obsługiwane.

Przykłady:
=> ssh.run[KexAlgorithms,127.0.0.1,,,Ciphers=aes128-ctr]
=> ssh.run[KexAlgorithms,,,,"KexAlgorithms=diffie-hellman-group1-sha1;HostkeyAlgorithms=ssh-rsa,ssh-dss,ecdh-sha2-nistp256"]
=> ssh.run[PubkeyAcceptedKeyTypes,127.0.0.1,,,PubkeyAcceptedKeyTypes=ssh-rsa]

subsystem pozwala przekazać podsystem SSH, ograniczając połączenie SSH do określonych operacji dozwolonych przez podsystem (np. transfer plików przy użyciu SFTP lub zarządzanie urządzeniami sieciowymi przy użyciu NETCONF). Należy pamiętać, że użycie podsystemu może również wymagać zastosowania określonej składni skryptu w parametrze Executed script.

Przykłady:
=> ssh.run[SFTPBackup,192.0.2.18,,,,sftp]
=> ssh.run[Cisco1234,192.0.2.18,,,,netconf]
Authentication method Jedna z wartości: "Password" lub "Public key".
User name Nazwa użytkownika (do 255 znaków) używana do uwierzytelnienia na zdalnym hoście. Wymagane.
Public key file Nazwa pliku klucza publicznego, jeśli Authentication method to "Public key". Wymagane. Przykład: id_rsa.pub - domyślna nazwa pliku klucza publicznego generowanego poleceniem ssh-keygen.
Private key file Nazwa pliku klucza prywatnego, jeśli Authentication method to "Public key". Wymagane. Przykład: id_rsa - domyślna nazwa pliku klucza prywatnego.
Password or
Key passphrase
Hasło (do 255 znaków) do uwierzytelnienia lub
Hasło klucza jeśli zostało użyte dla klucza prywatnego.
Pozostaw pole Key passphrase puste, jeśli hasło klucza nie było używane.
Zobacz także known issues dotyczące użycia hasła klucza.
Executed script Wykonywane polecenie(-a) powłoki przy użyciu zdalnej sesji SSH. Wartość zwracana przez wykonywane polecenie(-a) powłoki jest ograniczona do 16MB (wliczając końcowe białe znaki, które są obcinane); obowiązują również database limits.

Należy pamiętać, że biblioteka libssh2 może obcinać wykonywalne skrypty do \~32kB.

Przykłady:
date +%s
systemctl status mysql-server
ps auxww \| grep httpd \| wc -l

Przykład (dla podsystemu NETCONF):
<rpc>
<get-software-information/>
</rpc>
]]>]]>
<rpc>
<close-session/>
</rpc>
]]>]]>