当某人通过 SSH Linux Centos7 工作站发送通知邮件(命令 who 的输出)

当某人通过 SSH Linux Centos7 工作站发送通知邮件(命令 who 的输出)

我的 Linux 工作站是共享网络的一部分。我希望每次有人通过 SSH 连接我的工作站时都会收到一封通知电子邮件。为此,我打开了该文件~/.bash_profilegedit我的~/.bash_profile文件完全是空的),并编写了以下几行:

IP="$(echo $SSH_CONNECTION | awk '{print $1}')"
HOST=$(hostname)
TIME_DATE_STAMP=$(date +"%e %b %Y, %a %r")

echo 'The '$IP' logged into '$HOST' on '$ TIME_DATE_STAMP'.' | mail -s 'SSH 
Login Notification' MY_EMAIL_ADDRESS

我仍然没有收到通知电子邮件!请通知我我做错了什么?

要解决此问题:当我使用命令"who -H"int 终端时。它会列出所有传入我的工作站的 ssh 操作的列表。我的问题是:命令“who”如何生成此信息?它的数据来源是什么,我可以依靠它来获取ssh我想要的数据吗?

答案1

有几件事:

  • 你的 ~/.bash_profile仅在以下情况下开始登录。这些其他用户可能不会以您的身份登录。

  • 要观察谁通过 ssh 登录 CentOS 计算机,请解析/var/log/secure.

它看起来像这样:

tail -f /var/log/secure | while read LOGLINE
do
   [[ "${LOGLINE}" == *"logged in"* ]] && mail -s 'SSH Notification' $MY_EMAIL_ADDRESS
done

编辑:您已经编辑了您的问题以询问如何who命令的工作原理。看我不是 C 开发人员,但是这是源代码who这是命令如果你真的想看看它是如何工作的。然而,我认为这不是您正在寻找的东西 - 而且我知道没有其他方法可以帮助您。即使您可以创建一个脚本来检查某人是否利用cron&登录who,但始终有可能有人可以在您的运行之间登录和注销。日志是必经之路。

答案2

您可以从命令“who”中提取所需的信息,然后将其通过管道传输到命令邮件。命令示例:

 who | awk '{print $1" "$3" "$4" " $5}' | tail -1 | mail -s 'WARNING: SSH Notification' EMAIL_ADDRESS

将上一个命令保存为bash,并将其安排crontab为每隔特定分钟(例如每 30 分钟)运行一次。

答案3

您可以通过管道输出命令的输出last

last | head -1 | mail -s 'WARNING:' EMAIL_ADRESS

相关内容