Быстро настроим отправку уведомлений в Телеграм о входе любого пользователя по ssh
Не важно, как часто приходится пользоваться консолью удаленных серверов, эта опция не помешает. Удобно знать, когда был осуществлен вход, и сам ли ты входил 🙂
У себя я настроил отправку уведомления на сервере с Ubuntu 16.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 не получаю.
Автору все равно спасибо за информацию.
Всем удачи.