보안이 중요한 웹사이트에 로그인 할 때마다 SMS, 이메일, 전화 등을 통해 유용한 알림이 전송됩니다. SSH를 통하여 로그온 할때 내 VPS가 동일하게 작동하기를 원합니다. 왜냐하면 다른 사람이 내 키를 사용하여 로그인하지 않았는지 확인할 필요가 있습니다.
휴대폰을 가지고 있으면 텔레그램 봇을 통하여 푸시 알림을 받을수 있습니다.
1단계: 봇 생성
Telegram의 @BotFather 와 대화해야 합니다.
자세한 안내는 Telegram 사이트를 참고해주세요.
마지막에는 다음과 같은 봇 토큰을 받아야 합니다.
987654321:ABCDEFGHIJKLMNopqrstUVWXYZ123456789
2단계: /etc/ssh 에 스크립트 추가
사용자가 로그인 할 때 PAM이 실행할 스크립트를 만듭니다. 아무 곳에나 둬도 상관없지만 이번에는 /etc/ssh 안에 넣겠습니다.
sudo touch /etc/ssh/login_notify.sh
sudo chmod +x /etc/ssh/login_notify.sh
sudo editor /etc/ssh/login_notify.sh
스크립트 내용은 다음과 같습니다.
#!/usr/bin/env bash
# Content of /etc/ssh/login_notify.sh
TELEGRAM_TOKEN="987654321:ABCDEFGHIJKLMNopqrstUVWXYZ123456789"
CHAT_ID=""
if [ ${PAM_TYPE} = "open_session" ]; then
MESSAGE="$PAM_USER@$PAM_RHOST: knock knock via $PAM_SERVICE"
curl -s -X POST "https://api.telegram.org/bot$TELEGRAM_TOKEN/sendMessage" -d chat_id="$CHAT_ID" -d text="$MESSAGE" > /dev/null 2>&1
fi
Code language: PHP (php)
login_notify.sh를 지금 실행하면 스크립트 내부 $CHAT_ID가 설정되지 않았고 Telegram이 이 메세지를 누구에게 보낼지 모르게 때문에 아무것도 수신할 수 없습니다.
채팅 ID를 얻으려면 먼저 봇에게 /start 메시지를 보내세요. 그런 다음 터미널에서
curl https://api.telegram.org/bot<BOT TOKEN>/getUpdates
# { ..."chat": { "id": 12345, ... }... }
Code language: PHP (php)
에서 찾은 채팅 ID를 입력해 보겠습니다.
--- a/etc/ssh/login_notify.sh
+++ b/etc/ssh/login_notify.sh
- CHAT_ID=""
+ CHAT_ID="12345"
Code language: JavaScript (javascript)
최소한의 환경 변수를 설정하며 스크립트를 실행하여 보겠습니다.
PAM_TYPE="open_session" /etc/ssh/login_notify.sh
# Telegram > "@: knock knock via"
Code language: PHP (php)
3단계: 스크립트를 트리거 하도록 PAM 구성 수정
각 서비스에 대한 PAM구성은 /etc/pam.d에 있습니다. 특히 이번에는 /etc/pam.d/sshd 를 수정해야 합니다.
sudo editor /etc/pam.d/sshd
끝에 다음과 같은 내용을 추가합니다.
# Login Telegram Notification
session optional pam_exec.so /etc/ssh/login_notify.sh
Code language: PHP (php)
4단계: 테스트
ssh -l username hostname -P port
끝.