Уведомление в Telegram о входе пользователя по SSH

Быстро настроим отправку уведомлений в Телеграм о входе любого пользователя по ssh

Не важно, как часто приходится пользоваться консолью удаленных серверов, эта опция не помешает. Удобно знать, когда был осуществлен вход, и сам ли ты входил 🙂

У себя я настроил отправку уведомления на сервере с Ubuntu 16.04, на Ubuntu 20.04 тоже работает. На других системах не проверял.

Для начала установим jq, чтобы скрипт отправлял местоположение в сообщении:

apt install jq

Теперь сам скрипт. Его нужно сохранить в /etc/profile.d/
Открываем любимым редактором:

nano /etc/profile.d/ssh-to-telegram.sh

Скрипт выглядит следующим образом:

USERID="-1001555555505"
KEY="514238555:AAGeYjt955555cRrZQ5555rhc5FTCfAaINU"
TIMEOUT="10"
URL="https://api.telegram.org/bot$KEY/sendMessage"
DATE_EXEC="$(date "+%d %b %Y %H:%M")"
TMPFILE='/tmp/ipinfo-$DATE_EXEC.txt'
if [ -n "$SSH_CLIENT" ]; then
	IP=$(awk '{print $1}' <<< $SSH_CLIENT)
	PORT=$(awk '{print $3}' <<< $SSH_CLIENT)
	HOSTNAME=$(hostname -f)
	IPADDR=$(hostname -I | awk '{print $1}')
	curl http://ipinfo.io/$IP -s -o $TMPFILE
	CITY=$(jq -r '.city' < $TMPFILE)
	REGION=$(cat $TMPFILE | jq '.region' | sed 's/"//g')
	COUNTRY=$(cat $TMPFILE | jq '.country' | sed 's/"//g')
	ORG=$(cat $TMPFILE | jq '.org' | sed 's/"//g')
	TEXT="$DATE_EXEC: Вход пользователя ${USER} по ssh на $HOSTNAME ($IPADDR) из $IP - $ORG - $CITY, $REGION, $COUNTRY через порт $PORT"
	curl -s --max-time $TIMEOUT -d "chat_id=$USERID&disable_web_page_preview=1&text=$TEXT" $URL > /dev/null
	rm $TMPFILE
fi

Где USERID=»-1001555555505» это id чата для отправки сообщения

И KEY=»514238555:AAGeYjt955555cRrZQ5555rhc5FTCfAaINU» это токен вашего бота.

Как получить userid и токен я писал в этой записи:

Теперь после каждой успешной аутентификации по ssh мы получим уведомление:


Скрипт нашел тут: https://gist.github.com/matriphe/9a51169508f266d97313#file-ssh-telegram-sh

Поделитесь с друзьями

комментариев 9

      • Я правильно поняла, что скрипт нужно положить в /etc/profile.d/ ?
        При подключении новой сессии ssh, выдает ошибку:
        -bash: /etc/profile.d/ssh_alert_bot.sh: строка 5: синтаксическая ошибка рядом с неожиданным маркером «;&»
        -bash: /etc/profile.d/ssh_alert_bot.sh: строка 5: `if [ -n «$SSH_CLIENT» ] &amp;&amp; [ -z «$TMUX» ]; then’

        • Только что проверил на свежей машине с Ubuntu 20.04, все работает. Да, скрипт сохранить в /etc/profile.d.

          Скопировал скрипт, затем

          nano /etc/profile.d/ssh-to-telegram.sh
          

          вставил скрипт, изменил вручную USERID и KEY на свои и сохранил. Уведомление пришло:

  1. не у меня тоже ничего не работает, не понимаю почему…
    в телеге тихо…

    • Может скрипт криво встал в статью.. пробовали по ссылке скопировать оригинальный?

  2. Centos 7. Все работает, спасибо, но есть одно «но». Авторизовавшись, получив уведомление от бота, открывая, например mc — идет подвисание терминала, получаю второе уведомление об авторизации на сервере по ssh и уже только потом происходит открытие самого mc.

    Почему приходит второе уведомление? Почему подвисает открытие mc? При работе с другими файловыми редакторами или командами — все ок. Такое только при запуске Midnight Commander.

    Кто нибудь сталкивался с подобным?

    • Решил проблему следующим образом:

      Удалил скрипт из /etc/profile.d/ и реализовал все через PAM.

      По адресу /etc/ssh создал скрип следующего содержания:

      [spoiler title=»login_telegram.sh»]
      #!/usr/bin/env bash
      TELEGRAM_TOKEN=»ВАШ_ТОКЕН»
      CHAT_ID=»-ВАШ_ID»
      DATE_EXEC=»$(date «+%d %b %Y %H:%M»)»
      TMPFILE=’/tmp/ipinfo-$DATE_EXEC.txt’

      if [ ${PAM_TYPE} = «open_session» ]; then

      HOSTNAME=$(hostname -f)
      IP=$(awk ‘{print $1}’ <<< $PAM_RHOST)
      IPADDR=$(hostname -I | awk ‘{print $1}’)
      curl http://ipinfo.io/$IP -s -o $TMPFILE
      CITY=$(jq -r ‘.city’ < $TMPFILE)
      REGION=$(cat $TMPFILE | jq ‘.region’ | sed ‘s/»//g’)
      COUNTRY=$(cat $TMPFILE | jq ‘.country’ | sed ‘s/»//g’)
      ORG=$(cat $TMPFILE | jq ‘.org’ | sed ‘s/»//g’)

      MESSAGE=»$DATE_EXEC

      Вход пользователя $PAM_USER по $PAM_SERVICE!
      Сервер: $HOSTNAME ($IPADDR) Centos 7.
      Адрес авторизации: $IP — $ORG — $CITY, $REGION, $COUNTRY

      Centos 7″

      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
      [/spoiler]

      Выдал скрипту права chmod 777 etc/ssh/login_telegram.sh.

      Далее по пути /etc/pam.d в файле sshd добавляем в конце адрес к скрипту

      # ssh alarm telegram
      session optional pam_exec.so /etc/ssh/login_telegram.sh

      Проверил — работает. MC запускается без задержек, ошибочное уведомление при открытии того же mc не получаю.

      Автору все равно спасибо за информацию.

      Всем удачи.

  3. еще бы исключение сделать для локалки где ты сам сидишь, например 192.168.5.0

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

Exit mobile version