Table of Contents

Задача

Нужно отправлять уведомления, когда пользователь подключается по SSH.
Реализовать это можно несколькими способами.
Тут я рассмотрю варианты с отправкой уведомлений средствами sshrc и pam_exec.

sshrc

Скрипт sshrc запусается от имени пользователя при успешном установлении ssh-сессии в интерактивном режиме (то есть неинтерактивные сессии, которые, например, создают ssh-туннели, этот скрипт не запускают). Чтобы с его помощью отправлять уведомления нужно настроить sendmail, убедиться, что сообщения отправляются и потом прописать в файл /etc/ssh/sshrc такое:

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

Вероятно, может понадобиться разрешить запуск 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, который будет запускаться при успешной аутентификации. Например такой:

#!/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

И делаем файл исполняемым.
После этого в файл /etc/pam.d/sshd добавляем строку:

session optional pam_exec.so seteuid /path/to/login-notify.sh

Для отладки, модуль pam_exec добавляем как optional (впоследствии можно заменить на required).
И указываем файл запускаемомго скрипта.