我的 Linux 工作站是共享网络的一部分。我希望每次有人通过 SSH 连接我的工作站时都会收到一封通知电子邮件。为此,我打开了该文件~/.bash_profile
(gedit
我的~/.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