Differences

This shows you the differences between two versions of the page.


Previous revision
linux_faq:notify_on_ssh_connection_established [2019/06/25 08:11] (current) – [Отправка уведомлений с помощью pam_exec] admin
Line 1: Line 1:
 +====== Задача ======
 +Нужно отправлять уведомления, когда пользователь подключается по SSH. \\
 +Реализовать это можно несколькими способами. \\
 +Тут я рассмотрю варианты с отправкой уведомлений средствами **sshrc** и **pam_exec**.
 +
 +====== sshrc ======
 +Скрипт **sshrc** запусается от имени пользователя при успешном установлении ssh-сессии в интерактивном режиме (то есть неинтерактивные сессии, которые, например, создают ssh-туннели, этот скрипт не запускают).
 +Чтобы с его помощью отправлять уведомления нужно настроить **sendmail**, убедиться, что сообщения отправляются и потом прописать в файл **/etc/ssh/sshrc** такое: 
 +<code>ip=`echo $SSH_CONNECTION | cut -d " " -f 1`
 +
 +#logger -t ssh-wrapper $USER login from $ip
 +printf "Subject: SSH Connection\nFrom: admin@autosys.tk\nUser $USER just logged in from $ip" | sudo sendmail admin@autosys.tk 2>/dev/null
 +</code>
 +Вероятно, может понадобиться разрешить запуск **sendmail** от имени непривилегированных пользователей:
 +  sudo chmod 4755 /usr/sbin/sendmail
 +  sudo ln -s /usr/sbin/sendmail /usr/bin
 +
 +====== Отправка уведомлений с помощью pam_exec  ======
 +К сожалению, отправка уведомлений с помощью **sshrc** может не работать, если у пользователя сконфигурирован собственый файл **~/.ssh/rc**. В этом случае, скрипт **/etc/ssh/sshrc** не работает и на помощь приходит **pam_exec**. В качестве бонуса - этот метод позволяет настроить уведомление и о других событиях входа (не только по ssh). \\
 +Итак, пишем скрипт **login-notify.sh**, который будет запускаться при успешной аутентификации. Например такой:
 +<code>
 +#!/bin/sh
 +
 +sender="admin@autosys.tk"
 +recepient="admin@autosys.tk"
 +
 +if [ "$PAM_TYPE" != "close_session" ]; then
 +    host="`hostname`"
 +    subject="SSH Login: $PAM_USER from $PAM_RHOST on $host"
 +    # Message to send, e.g. the current environment variables.
 +    message="`env`"
 +    printf "Subject: $subject\nFrom: $sender\n$message\n`date`" | sendmail $recepient 2>/dev/null
 +#   echo "$message" | mailx -r "$sender" -s "$subject" "$recepient"
 +fi
 +
 +</code>
 +И делаем файл исполняемым. \\
 +После этого в файл **/etc/pam.d/sshd** добавляем строку:
 +  session optional pam_exec.so seteuid /path/to/login-notify.sh
 +Для отладки, модуль **pam_exec** добавляем как **optional** (впоследствии можно заменить на **required**). \\
 +И указываем файл запускаемомго скрипта.