我正在尝试编写一个脚本,当有人通过ssh登录机器时通知用户.
我目前的想法是在间隔中使用grep解析"w"的输出.
但这既不优雅也不高效.有没有人更好地了解如何实施这样的程序?
真的很感激任何帮助!
Paul Tomblin有正确的建议.
在sshd_config中设置日志记录以指向可以单独记录的syslog工具:
=>请参阅man 3 syslog以获取更多设施.选择一个像例如
# Logging SyslogFacility local5 LogLevel INFO
然后像这样设置你的syslog.conf:
local5.info |/var/run/mysshwatcher.pipe
将要写入的脚本添加到/ etc/inittab,以便它继续运行:
sw0:2345:respawn:/usr/local/bin/mysshwatcher.sh
然后编写你的脚本:
#!/bin/sh P=/var/run/mysshwatcher.pipe test -p $P || mkfifo $P while read x <$P; do # ... whatever, e.g.: echo "ssh info: $x" | wall done;
最后,重新启动syslogd并重新加载inittab(init q),它应该可以工作.如果使用这些服务的其他variantes,则需要相应地配置(例如newsyslogd => /etc/newsyslog.conf; Ubuntu:/etc/event.d不是inittab)
这是非常简陋和缺乏的,但应该足以让你开始......
更多信息:man sshd_config获取更多日志记录选项/详细程度.
在Ubuntu上(我猜所有其他Debian发行版,如果不是所有的Linuces),文件/var/log/auth.log记录成功(和不成功)登录尝试:
sshd[XXX]: pam_unix(sshd:session): session opened for user XXX
您可以使用此命令设置一个非常简单的监视器(请注意,您必须是root才能看到auth日志):
sudo tail -F /var/log/auth.log | grep sshd
如果你不在乎他们如何登录(telnet/ssh),'last'Unix命令行实用程序会显示机器中的最后几次登录.远程用户将显示IP地址
[root @ ex02 www] #last foo pts/1 81.31.xy Sun 1月18日07:25仍登录
foo pts/0 81.31.xy Sun 1月18日01:51仍然登录
foo pts/0 81.31.xy 1月17日星期六03:51 - 07:52(04:00)
bar pts/5 199.146.xy Fri Jan 16 08:57 - 13:29(04:32