我喜欢在有人login到我的Linux服务器时收到通知,并且能够找出login尝试的位置。 我怎样才能做到这一点?
Linuxlogin过程主要由PAM (Pluggable Authentication Modules for Linux)来pipe理,它是一套共享库,使本地系统pipe理员可以select应用程序如何authentication用户。
默认情况下,一些PAM消息已经logging到系统日志,因此通过监控您可以触发通知。
更具体的说,你可以使用pam_exec来执行一个特定的通知命令,作为成功的login事件的一部分。
好的,谢谢你回答这个问题。 不过,我做了一些略有不同的事情,我在全局的bashrc文件中有一行命令。
这是我的解决scheme
echo "Login on" `hostname` `date` | mail -s "Login on `hostname` `who am i | awk '{print $5}' | sed 's/[()]//g' | cut -f1 -d "." | sed 's/-/./g'`" [email protected]
假设你的Linux机器上安装了mailutils软件包。
如果您在谈论“logging”时想到ssh,可以使用syslog和rsyslog。
对于rsyslog检查: http ://www.rsyslog.com/doc/ommail.html有了一些设置,您可以通过邮件或日志系统堆栈(麋鹿堆栈,graylog2,splunk等)发送日志。
为此你可以使用tcp_wrapper,在/etc/hosts.allow可以使用类似这样的东西。
sshd : ALL : spawn (echo -e "Connected from IP %h with user %u" | mail -s "SSH Connection" [email protected]) : ALLOW
了解更多信息。
man 5 hosts_access
但是用这种方法,你需要小心,如果你的服务器暴露在互联网,因为每次有人会尝试连接到SSH端口,你会recive电子邮件,所以我没有这个问题,因为我用这个私人LAN,
在/etc/ssh/sshrc使用第二个方法,如下所示。
echo $USER $SSH_CLIENT $(date "+%F %H-%M-%S") | mail -s "ssh connection" [email protected]
使用最后一种方法,只有当用户login到服务器时,才会收到一封邮件。
CentOS的
在文本编辑器中打开文件〜/ .bash_profile。 追加下面的行
IP="$(echo $SSH_CONNECTION | cut -d " " -f 1)" HOSTNAME=$(hostname) NOW=$(date +"%e %b %Y, %a %r") echo 'Someone from '$IP' logged into '$HOSTNAME' on '$NOW'.' | mail -s 'SSH Login Notification' YOUR_EMAIL_ADDRESS
如果您使用的是Ubuntu / Debian,请将相同的内容添加到〜/ .bashrc中
有3个SSH客户端环境variables。
SSH_CLIENT ='192.168.223.17 36673 22'
SSH_CONNECTION ='192.168.223.17 36673 192.168.223.229 22'
SSH_TTY =的/ dev / PTS / 6
SSH_CLIENT显示客户端系统的地址,客户端系统上的传出端口号和服务器上的传入端口。 SSH_CONNECTION显示客户端的地址,客户端上的传出端口,服务器的地址和服务器上的传入端口。 SSH_TTY命名连接使用的服务器上的伪terminal设备,缩写为Ppty