当我的 Ubuntu 服务器通过 SSH 访问时我需要通过电子邮件收到通知。
如果可能的话,我该怎么做?
答案1
pam_script当用户登录时将运行您想要的任何程序。
答案2
您应该能够使用 中的规则来执行此操作/etc/hosts.allow
。尝试以下操作:
sshd: ALL: (/usr/bin/echo "SSH connection from %h (%H)" | /usr/bin/mailx -s "SSH Alert" [email protected])
您可以从 运行的脚本/etc/profile.d
或 中包含的脚本中获取更多详细信息/etc/profile
。但是,这仅在用户登录到交互式会话时才有效。
如果您不需要立即通知,logcheck
程序可以每小时通知您过去一小时内的任何访问。您需要在配置中添加适当的规则。
编辑:Ubuntu 使用不兼容的hosts_options
格式来执行 shell 命令。以下规则是我实施的:
SSHD: ALL: spawn (/bin/echo "SSH connection to %H from %h[%a]" | \
/usr/bin/mailx -s "SSH Alert" [email protected])
注意:可以使用反斜杠符号换行,如上所示。替换字符在hosts.allow
手册页中有说明。
答案3
最好的办法是设置一个脚本来查看日志文件。
我目前正在使用手机,但是检查 /var/log/access.log
答案4
日志在 auth.log 上,你可以执行
cat /var/log/auth.log | grep ssh
要实际发送邮件,您可以安装 SSMTP,并按如下方式编辑其配置:
/etc/ssmtp/ssmtp.conf
[电子邮件保护] mailhub=smtp.gmail.com:465 rewriteDomain=gmail.com AuthUser=你的用户名 AuthPass=你的密码 FromLineOverride=YES UseTLS=YES
创建一个文本文件,其消息正文如下:
到:[电子邮件保护] 从:[电子邮件保护] 主题:SSH 警告或其他
邮件内容
要添加内容,您可以执行以下操作:
tail /var/log/auth.log | grep ssh >> /tmp/mailcontents.txt
然后运行
ssmtp [email protected] < /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 [email protected] < mailcontents.txt;
fi
done
邮件内容应包括如前所述的地址,脚本代码尚未检查是否有效,请将其视为伪代码。