我正试图编写一个脚本,通知用户何时某人通过ssh登录了该计算机。适用于Linux的SSH“登录监视器”
我目前的想法是使用grep间隔分析“w”的输出。
但这既不优雅也不表现。有没有人有更好的想法如何实施这样的程序?
任何帮助真的很感谢!
我正试图编写一个脚本,通知用户何时某人通过ssh登录了该计算机。适用于Linux的SSH“登录监视器”
我目前的想法是使用grep间隔分析“w”的输出。
但这既不优雅也不表现。有没有人有更好的想法如何实施这样的程序?
任何帮助真的很感谢!
在Ubuntu(和我猜所有其他Debian的发行版,如果不是全部Linuces),该文件/var/log/auth.log记录成功(或失败)的登录尝试:
sshd[XXX]: pam_unix(sshd:session): session opened for user XXX
你可以建立一个非常简单的显示器使用此命令(注意,你必须要根看到AUTH日志):
sudo tail -F /var/log/auth.log | grep sshd
设置一个命名管道,并建立一个日志文件解析器来侦听它,并发送ssh消息给它。日志文件解析器可以做你想做的事情,或者发信号给守护进程去做。
重定向日志文件是在/ etc /中的配置文件中完成的,该文件的名称现在就让我感觉不到了。 /etc/syslog.conf,我想。
保罗汤布林有正确的建议。
设置日志记录在你的sshd_config指向一个syslog工具,你可以分别登录:
=>见人3系统日志的更多的设施。选择一个像例如
# 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;
Fina lly,重新启动你的syslogd并重新加载inittab(init q),它应该可以工作。如果使用这些服务的其他变体,则需要相应地进行配置(例如,newsyslogd => /etc/newsyslog.conf; Ubuntu:/etc/event.d不是inittab)
这是非常简陋和缺乏的,但应该足以让你开始...
更多信息:man sshd_config for more logging options/verbosity。
是的,这几乎就是我在上一份工作中所做的,除了我用perl来看管道。我会发布更多的细节,除了我的源代码在家。 – 2009-01-13 20:17:52
如果你不在乎他们是如何登录的(telnet/ssh),'最后的'Unix命令行工具将显示你机器中最后几次登录。远程用户会显示IP地址
[根@ EX02 WWW]#最后 富PTS/1 81.31.xy日1月18日07:25仍然登录
富PTS/0 81.31.xy太阳1月18日01: 51仍然登录
foo pts/0 81.31.x.y Sat Jan 17 03:51 - 07:52(04:00)
bar pts/5 199.146.xy Fri Jan 16 08:57 - 13:29(04:32
我已经制作了一个程序我叫认证显示器),解决了这个问题描述的任务。
如果你想,你以上,欢迎下载研究怎么解决这个问题(使用日志文件)。
你可以在这里免费找到身份验证监视器:http://bwyan.dk/?p=1744
或者您可以使用“tail -F”。 – 2009-01-13 19:47:03
优秀点 - 我不知道那个选项 – kdgregory 2009-01-13 19:51:07
我已经知道unix管理员谁做了同样的事情,用于检测登录作为他们的boxen根。如果有人以root身份登录,则会将电子邮件发送到其传呼机。非常有用,但偶尔会有趣,因为每次他们进行严格的维护并打开一个root shell时,他们会得到一个页面... – 2009-01-13 20:02:21