Быстро настроим отправку уведомлений в Телеграм о входе любого пользователя по 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
У меня что-то не работает, все делаю по шагам..
Что именно не получается? Скрипт запускается вручную?
Я правильно поняла, что скрипт нужно положить в /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» ] && [ -z «$TMUX» ]; then’
Только что проверил на свежей машине с Ubuntu 20.04, все работает. Да, скрипт сохранить в /etc/profile.d.
Скопировал скрипт, затем
вставил скрипт, изменил вручную USERID и KEY на свои и сохранил. Уведомление пришло:

не у меня тоже ничего не работает, не понимаю почему…
в телеге тихо…
Может скрипт криво встал в статью.. пробовали по ссылке скопировать оригинальный?
Centos 7. Все работает, спасибо, но есть одно «но». Авторизовавшись, получив уведомление от бота, открывая, например mc — идет подвисание терминала, получаю второе уведомление об авторизации на сервере по ssh и уже только потом происходит открытие самого mc.
Почему приходит второе уведомление? Почему подвисает открытие mc? При работе с другими файловыми редакторами или командами — все ок. Такое только при запуске Midnight Commander.
Кто нибудь сталкивался с подобным?
Решил проблему следующим образом:
Удалил скрипт из /etc/profile.d/ и реализовал все через PAM.
По адресу /etc/ssh создал скрип следующего содержания:
#!/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
Выдал скрипту права 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 не получаю.
Автору все равно спасибо за информацию.
Всем удачи.
еще бы исключение сделать для локалки где ты сам сидишь, например 192.168.5.0