Мне нужно получать уведомление по электронной почте, когда мой сервер Ubuntu доступен через SSH.
Если возможно, как я могу это сделать?
Вы должны иметь возможность сделать это с помощью правила в /etc/hosts.allow
. Попробуйте что-нибудь вроде:
sshd: ALL: (/usr/bin/echo "SSH connection from %h (%H)" | /usr/bin/mailx -s "SSH Alert" you@example.com)
Вы можете получить более подробную информацию из сценария, запущенного из /etc/profile.d
, или включен в /etc/profile
. Однако это будет работать только в том случае, если пользователь войдет в интерактивный сеанс.
Если вам не нужно немедленное уведомление, logcheck
программа может уведомлять вас ежечасно о любых доступах за последний час. Вам нужно будет добавить соответствующие правила в конфигурацию.
РЕДАКТИРОВАТЬ: Ubuntu использует несовместимое hosts_options
формат для выполнения команд оболочки. Я реализовал следующее правило:
SSHD: ALL: spawn (/bin/echo "SSH connection to %H from %h[%a]" | \
/usr/bin/mailx -s "SSH Alert" me@example.com)
Примечания: Обозначение обратной косой черты может использоваться для переноса строк, как указано выше. Символы замены задокументированы в hosts.allow
справочная страница.
pam_script будет запускать любую программу, которую вы хотите, когда пользователь входит в систему.
Лучше всего настроить сценарий для просмотра файла журнала.
Я сейчас на телефоне, но проверьте /var/log/access.log
Журнал находится в auth.log, вы можете сделать
cat /var/log/auth.log | grep ssh
Чтобы действительно отправить почту, вы можете установить SSMTP, отредактируйте его конфигурацию следующим образом:
/etc/ssmtp/ssmtp.conf
root=yourusername@gmail.com mailhub = smtp.gmail.com: 465 rewriteDomain = gmail.com AuthUser = yourusername AuthPass = yourpassword FromLineOverride = YES UseTLS = YES
Создайте текстовый файл с телом сообщения следующим образом:
Кому: recipient@gmail.com От: yourusername@gmail.com Тема: Предупреждение SSH или что-то еще
СОДЕРЖАНИЕ ПОЧТЫ
Чтобы добавить контент, вы можете:
tail /var/log/auth.log | grep ssh >> /tmp/mailcontents.txt
а затем запустить
ssmtp recipient_name@gmail.com < /tmp/mailcontents.txt
РЕДАКТИРОВАТЬ:
Другой OP сказал, что вам может потребоваться уведомление каждый раз, когда это происходит, вы можете сделать что-то вроде этого:
создать сценарий с
!/bin/sh
tail /var/log/auth.log | grep ssh >> /tmp/alert&
while true; do
change=$(inotifywait -e close_write,moved_to,create .)
change=${change#./ * }
if [ "$change" = "/tmp/alert" ]; then
tail -n 1 /tmp/alert >> /tmp/mailcontents.txt
ssmtp recipient_name@gmail.com < mailcontents.txt;
fi
done
Содержимое почты должно включать адреса, как указано ранее, код сценария не был проверен на соответствие действительности, считайте его псевдокодом.