11 SSH 에이전트

개요

SSH 검사는 에이전트 없는 모니터링으로 수행됩니다. SSH 검사에는 Zabbix 에이전트가 필요하지 않습니다.

SSH 검사를 수행하려면 Zabbix 서버가 SSH2 지원(libssh 또는 libssh2)으로 초기에 구성되어야 합니다. 다음도 참고하세요: 요구사항.

RHEL 8부터는 libssh만 지원됩니다. 다른 배포판의 경우, libssh2보다 libssh가 권장됩니다.

구성

패스프레이즈 인증

SSH 검사는 두 가지 인증 방법을 제공합니다 - 사용자/비밀번호 쌍과 키 파일 기반.

키를 사용하지 않으려는 경우, 소스에서 빌드하는 경우 libssh 또는 libssh2를 Zabbix에 연결하는 것 외에는 추가 구성이 필요하지 않습니다.

키 파일 인증

SSH 아이템에 대해 키 기반 인증을 사용하려면 서버 구성에 특정 변경이 필요합니다.

Zabbix 서버 구성 파일(zabbix_server.conf)을 root로 열고 다음 줄을 찾으세요:

# SSHKeyLocation=

주석을 해제하고 공개 키와 개인 키가 위치할 폴더의 전체 경로를 설정하세요:

SSHKeyLocation=/home/zabbix/.ssh

파일을 저장하고 이후에 Zabbix 서버를 재시작하세요.

여기서 /home/zabbix 경로는 zabbix 사용자 계정의 홈 디렉토리이고, .ssh은 기본적으로 홈 디렉토리 내에서 ssh-keygen 명령에 의해 공개 키와 개인 키가 생성될 디렉토리입니다.

일반적으로 다른 OS 배포판의 Zabbix 서버 설치 패키지는 zabbix 사용자 계정을 다른 곳에 홈 디렉토리로 생성합니다. 예를 들어 /var/lib/zabbix (시스템 계정의 경우).

키를 생성하기 전에 홈 디렉토리를 /home/zabbix로 재할당할 수 있습니다. 그래야 위에서 언급한 Zabbix 서버 구성 매개변수 SSHKeyLocation과 일치합니다.

설치 섹션에 따라 zabbix 계정이 수동으로 추가된 경우 다음 단계를 건너뛸 수 있습니다. 이러한 경우 zabbix 계정의 홈 디렉토리는 이미 /home/zabbix일 가능성이 높습니다.

zabbix 사용자 계정의 홈 디렉토리를 변경하려면 이를 사용하는 모든 작업 프로세스를 중지해야 합니다:

systemctl stop zabbix-agent
systemctl stop zabbix-server

홈 디렉토리 위치를 변경하면서 (존재하는 경우) 이동을 시도하려면 다음 명령을 실행해야 합니다:

usermod -m -d /home/zabbix zabbix

홈 디렉토리가 이전 위치에 존재하지 않을 수도 있으므로 새 위치에 생성해야 할 수도 있습니다. 안전한 시도 방법은 다음과 같습니다:

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

모든 것이 안전하다는 것을 확실히 하기 위해 홈 디렉토리에 권한을 설정하는 추가 명령을 실행할 수 있습니다:

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

이전에 중지된 프로세스를 다시 시작할 수 있습니다:

systemctl start zabbix-agent
systemctl start zabbix-server

이제 공개 키와 개인 키를 생성하는 단계를 다음 명령으로 수행할 수 있습니다 (가독성을 위해 명령 프롬프트는 주석 처리됨):

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):
<비워둠>
# Enter same passphrase again: 
<비워둠>
# 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+        |
# +-----------------+

공개 키와 개인 키(id_rsa.pubid_rsa)가 기본적으로 /home/zabbix/.ssh 디렉토리에 생성되었습니다. 이는 Zabbix 서버 SSHKeyLocation 구성 매개변수와 일치합니다.

"rsa" 이외의 키 유형은 ssh-keygen 도구와 SSH 서버에서 지원될 수 있지만 Zabbix에서 사용하는 libssh2에서는 지원되지 않을 수 있습니다.

셸 구성 양식

이 단계는 SSH 검사로 모니터링될 모든 호스트에 대해 한 번만 수행되어야 합니다.

다음 명령을 사용하여 공개 키 파일을 원격 호스트 10.10.10.10에 설치할 수 있습니다. 그래야 SSH 검사를 root 계정으로 수행할 수 있습니다 (가독성을 위해 명령 프롬프트는 주석 처리됨):

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:
<root 비밀번호 입력>
# Now try logging into the machine, with "ssh '[email protected]'",
# and check to make sure that only the key(s) you wanted were added.

이제 zabbix 사용자 계정에 대해 기본 개인 키(/home/zabbix/.ssh/id_rsa)를 사용하여 SSH 로그인을 확인할 수 있습니다:

sudo -u zabbix ssh [email protected]

로그인이 성공하면 셸에서 구성 부분이 완료된 것이며 원격 SSH 세션을 닫을 수 있습니다.

아이템 구성

실행할 실제 명령은 아이템 구성의 실행 스크립트 필드에 배치해야 합니다. 여러 명령을 새 줄에 배치하여 하나씩 차례로 실행할 수 있습니다. 이 경우 반환 값도 여러 줄로 형식이 지정됩니다.

모든 필수 입력 필드는 빨간색 별표로 표시됩니다.

SSH 아이템에 대한 특정 정보가 필요한 필드들은 다음과 같습니다:

매개변수 설명 주석
유형 여기에서 SSH 에이전트를 선택하세요.
ssh.run[고유 짧은 설명,<ip>,<포트>,<인코딩>,<ssh 옵션>] 형식의 (호스트당) 고유 아이템 키 고유 짧은 설명은 필수이며 호스트당 각 SSH 아이템에 대해 고유해야 합니다.

기본 포트는 22이며, 이 아이템이 할당된 인터페이스에 지정된 포트가 아닙니다.

ssh 옵션key1=value1;key2=value2,value3 형식으로 추가 SSH 옵션을 전달할 수 있습니다. 하나의 키에 대한 여러 값은 쉼표로 구분하여 전달할 수 있습니다(이 경우 매개변수는 따옴표로 묶어야 함); 여러 옵션 키는 세미콜론으로 구분하여 전달할 수 있습니다.

다음 옵션 키가 지원됩니다: KexAlgorithms, HostkeyAlgorithms, Ciphers, MACs. 옵션 키와 값 지원은 SSH 라이브러리에 따라 다릅니다; 옵션이 지원되지 않으면 오류가 반환되고 아이템이 지원되지 않게 됩니다.

GnuTLS 및 OpenSSL에서와 같이 암호 설정을 추가하기 위한 "+" 기호와 특정 암호 설정을 비활성화하기 위한 "!" 기호는 지원되지 않습니다.

예제:
=> 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"]
인증 방법 "비밀번호" 또는 "공개 키" 중 하나.
사용자 이름 원격 호스트에서 인증할 사용자 이름(최대 255자). 필수.
공개 키 파일 인증 방법이 "공개 키"인 경우 공개 키의 파일 이름. 필수. 예: id_rsa.pub - ssh-keygen 명령으로 생성된 기본 공개 키 파일 이름.
개인 키 파일 인증 방법이 "공개 키"인 경우 개인 키의 파일 이름. 필수. 예: id_rsa - 기본 개인 키 파일 이름.
비밀번호 또는
키 패스프레이즈
인증용 비밀번호(최대 255자) 또는
개인 키에 사용된 경우 패스프레이즈.
패스프레이즈를 사용하지 않은 경우 키 패스프레이즈 필드를 비워두세요.
패스프레이즈 사용에 관한 알려진 문제도 참조하세요.
실행 스크립트 SSH 원격 세션을 사용하여 실행되는 셸 명령. 실행된 셸 명령의 반환 값은 16MB로 제한됩니다(잘려진 후행 공백 포함); 데이터베이스 제한도 적용됩니다.

libssh2 라이브러리는 실행 가능한 스크립트를 \~32kB로 자를 수 있습니다.

예제:
date +%s
systemctl status mysql-server
ps auxww | grep httpd | wc -l