SSH уведомление об авторизации

13 ноября 2013
Рубрика: Linux, vanoc.ru
Теги: ,

vanoc

Решил реализовать уведомление на почту о том, что кто-то авторизовался в ssh. Сперва решение выглядело вот так:

echo -e "Remote connection from\t $SSH_CONNECTION \nLogin $USER" | /bin/mail -s "[SSH] Login on $(hostname)" мояпочта@сайт.ru

Добавляем эту строку в /etc/ssh/sshrc (в случае, если этого файла нет, а его скорее всего не будет, его следует создать)

У этого решения есть существенный недостаток — письма будут отсылаться после любой аутентификации по ssh. Даже если это вы залогинились, письмо все равно вам придет. Дабы не получать массу писем и ввиду того, что я начал изучать python, решил попробовать написать на нем. Получился скрипт сравнивающий с нашего ли ip залогинились, в противном случае шлет email на указанную почту.


#!/usr/bin/env python

import smtplib, os, platform
from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText

server = smtplib.SMTP('smtp.сайт.ru', 25)

sender = 'root@'+platform.node()
to = 'мояпочта@сайт.ru'

ip = 'xxx.xxx.xxx.xxx'
sship = os.environ['SSH_CONNECTION']
loginname = os.environ['LOGNAME']

msg = MIMEMultipart()
msg['Subject'] = '[SSH] Login on ' + platform.node()
msg['From'] = sender
msg['To'] = to
text = 'Remote connection from\t' + sship + '\nLogin ' + loginname
msg.attach (MIMEText(text, 'plain'))

textmail = msg.as_string()

if ip in sship:
        print ('hi. Welcome!')
else:
        print ('who is it?')
        server.sendmail(sender, to, textmail)

Сохраняем скрипт в файл, например, noticessh.py и прописываем путь к нему в /etc/ssh/sshrc. К сожалению не со всеми версиями второго питона работает, так же мешает авторизовываться по sftp в случае, если sftp работает через ssh. FileZilla, например, ругается «Оut of memory!» Надо бы допилить, но на данный момент к сожалению знаний по питону не достаточно.

Похожие записи: