11 SSH agent
Omówienie
Kontrole SSH są wykonywane jako monitorowanie bez użycia agenta. Agent Zabbix nie jest potrzebny do kontroli SSH.
Aby wykonywać kontrole SSH, serwer Zabbix musi być początkowo 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 zalecany jest 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 za pomocą pliku klucza
Aby używać uwierzytelniania opartego na kluczu dla pozycji SSH, wymagane są pewne zmiany w konfiguracji serwera.
Otwórz plik konfiguracyjny serwera Zabbix
(zabbix_server.conf) jako root
i znajdź następującą linię:
# SSHKeyLocation=
Usuń komentarz i ustaw pełną ścieżkę do folderu, 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 w katalogu domowym.
Zazwyczaj pakiety instalacyjne serwera Zabbix z różnych dystrybucji OS tworzą konto użytkownika zabbix z katalogiem domowym w innym miejscu, na przykład /var/lib/zabbix (jak w przypadku kont systemowych).
Przed wygenerowaniem kluczy można zmienić lokalizację katalogu domowego na /home/zabbix, tak aby odpowiadała ona wspomnianemu powyżej parametrowi konfiguracyjnemu SSHKeyLocation serwera Zabbix.
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 działające procesy, które z niego korzystają:
systemctl stop zabbix-agent
systemctl stop zabbix-server
Aby zmienić lokalizację katalogu domowego z próbą przeniesienia go (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 nowym miejscu. Bezpieczna próba wykonania tego wygląda następująco:
test -d /home/zabbix || mkdir /home/zabbix
Aby mieć pewność, że wszystko jest zabezpieczone, można wykonać dodatkowe 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 pominięto znaki zachęty poleceń):
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 i id_rsa)
zostały domyślnie wygenerowane w katalogu /home/zabbix/.ssh,
co odpowiada parametrowi konfiguracyjnemu SSHKeyLocation serwera Zabbix.
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żywany 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), które mają zostać wykonane, należy umieścić w polu Executed script w konfiguracji pozycji. Kilka poleceń można wykonać jedno po drugim, umieszczając je w nowej linii. W takim przypadku zwracane wartości będą również sformatowane jako wielowierszowe.

Wszystkie obowiązkowe pola wejściowe są oznaczone czerwoną gwiazdką.
Pola wymagające określonych informacji dla pozycji SSH to:
| Parameter | Description | Comments |
|---|---|---|
| Type | Wybierz tutaj SSH agent. | |
| Key | Unikalny (dla 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 host. Domyślny port to 22, a nie port podany w interfejsie, do którego przypisana jest ta pozycja. ssh options umożliwiają przekazanie dodatkowych opcji 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ć ujęty w cudzysłów); 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 i wartości zależy od biblioteki SSH (na przykład PubkeyAcceptedKeyTypes jest obsługiwany tylko w 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 "+" służący do dołączania ustawień szyfrów oraz "!" służący 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 umożliwia przekazanie podsystemu SSH, ograniczając połączenie SSH do określonych operacji dozwolonych przez podsystem (np. transferów plików z użyciem SFTP lub zarządzania urządzeniem sieciowym z użyciem 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 opcji "Password" lub "Public key". | |
| User name | Nazwa użytkownika (do 255 znaków) do uwierzytelnienia na zdalnym host. 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 generowana przez polecenie 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 jeśli było użyte dla klucza prywatnego. |
Pozostaw pole Key passphrase puste, jeśli hasło nie było użyte. Zobacz także znane problemy dotyczące użycia hasła. |
| Executed script | Wykonywane polecenie(a) powłoki przy użyciu zdalnej sesji SSH. | Wartość zwracana przez wykonane polecenie(a) powłoki jest ograniczona do 16 MB (w tym końcowe białe znaki, które są obcinane); obowiązują również limity bazy danych. Należy pamiętać, że biblioteka libssh2 może obcinać wykonywalne skrypty do około 32 kB. Przykłady: date +%ssystemctl status mysql-serverps auxww | grep httpd | wc -lPrzykład (dla podsystemu NETCONF): <rpc><get-software-information/></rpc>]]>]]><rpc><close-session/></rpc>]]>]]> |