我在 /etc/profile 文件的末尾添加了以下代码,为了通过 mailgun 发送一封包含用户和连接 IP 信息的邮件,它会发送邮件,但我不知道如何获取 ssh 用户名和原始 IP?
如果 /etc/profile 中的方法失败,是否有可能无法登录 ssh
还有一个问题:现在它在登录成功时发送邮件(据我所知),登录失败时也可以发送邮件吗?
#!/bin/bash
##This script sends a mail on succesful shh login
if [ -n "$SSH_CLIENT" ]; then
TEXT="$GET_USER_NAME_AND_IP"
curl -s --user 'api:key-xxxxxxd3e1bd13c13cbxxxxxx' https://api.eu.mailgun.net/v3/mydomain.com/messages -F from='Server Notification <[email protected]>' -F to='[email protected]' -F subject="New SSH login detected" -F text=TEXT
fi
提前致谢
答案1
登录成功
尝试使用此 bash 脚本获取用户名和用户 IP 地址。这只是示例,您可以根据需要进行修改。仅适用于已登录用户。
#!/bin/bash
if [ -n "$SSH_CLIENT" ]; then
SSHIP=$(echo $SSH_CLIENT | cut -f 1 -d ' ')
SSHUSER=$(w | grep "$SSHIP" | cut -f 1 -d ' ')
echo -e " USER=$SSHUSER \n IP=$SSHIP"
# curl and next commands may be placed here ...
fi
!!! 请注意,该脚本最多只能在有一个 ssh 连接的情况下才能正常工作 !!!
对于多个并发连接,它需要进行修改,会变得更加复杂。
登录失败
您可以在“/var/log/auth.log”文件中找到失败的 SSH 登录尝试。
下面是列出不成功的 SSH 尝试的示例:
grep -i "ssh" /var/log/auth.log | grep "fail"
输出行包含user=
识别rhost=
用户及其 IP 地址的值。
以下是简化日志输出的过滤器示例:
grep -i "ssh" /var/log/auth.log | awk 'BEGIN { FS="rhost="; } /failure;/{ print $2; }'
重要的提示
我认为每次登录失败后都发送电子邮件不是一个好主意。当您的计算机界面暴露在互联网上时,它每天会记录数百到数千次失败的登录尝试。