获取 /etc/profile 中登录的 ssh 用户名和 ip 来发送邮件

获取 /etc/profile 中登录的 ssh 用户名和 ip 来发送邮件

我在 /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; }'

重要的提示

我认为每次登录失败后都发送电子邮件不是一个好主意。当您的计算机界面暴露在互联网上时,它每天会记录数百到数千次失败的登录尝试。

相关内容