[Linux] PAM과 Slack webhook을 사용해서 ssh 로그인 알림 기능 구현하기
시스템을 관리하다 보면 서버에 로그인한 사용자를 모니터링해야 할 때가 있습니다.
아래와 같이 watch -n 5 w
명령어로 현재 로그인되어 있는 사용자를 모니터링할 수도 있으나
# watch -n 5 wEvery 5.0s: w kvmit: Thu Aug 7 08:45:22 2025 08:45:22 up 2 days, 18:59, 3 users, load average: 0.16, 0.22, 0.20 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root pts/0 10.0.202.15 08:32 11:46 0.45s 0.00s watch -n 5 w
PAM과 Slack webhook을 이용해서 ssh 로그인이 되면 알림을 받을 수 있도록 설정해 보겠습니다.
- pam_exec.so 모듈이 설치되어 있는지 확인합니다. pam_exec.so 모듈을 통해 쉘 스크립트를 실행할 수 있습니다.
# find / -name pam_exec.so 2> /dev/null/usr/lib64/security/pam_exec.so
- 로그인이 성공할 경우, 실행해야 하는 쉘 스크립트를 작성합니다. 해당 쉘 스크립트에는 slack webhook으로 메세지를 전송하는 스크립트가 포함되어 있습니다.
# vi ssh_login_notify.sh#!/bin/bash if [ "$PAM_TYPE" == "open_session" ]; then WEBHOOK_URL="https://hooks.slack.com/services/your_webhook_url" HOST=`hostname` NOW=`date +"%Y-%m-%d %H:%M:%S"` MESSAGE="{\"text\":\"[$HOST] SSH Login : [${PAM_USER}] from ${PAM_RHOST} at ${NOW}.\"}" CMD="curl -X POST -H 'Content-type: application/json' --data '${MESSAGE}' ${WEBHOOK_URL}" eval "$CMD" fi
- /etc/pam.d/sshd 파일의 session 항목에 아래 사항을 추가합니다.
# vi /etc/pam.d/sshdsession optional pam_exec.so /path/to/ssh_login_notify.sh
- 사용자가 로그인을 성공하면 slack webhook과 연결된 채널을 통해 메세지가 표시됩니다.