우분투 SSH 접속시 텔래그램 알림

보안이 중요한 웹사이트에 로그인 할 때마다 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
fiCode 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.shCode language: PHP (php)

4단계: 테스트

ssh -l username hostname -P port

끝.

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

4 × 5 =