2009-01-13 41 views
6

我正试图编写一个脚本,通知用户何时某人通过ssh登录了该计算机。适用于Linux的SSH“登录监视器”

我目前的想法是使用grep间隔分析“w”的输出。

但这既不优雅也不表现。有没有人有更好的想法如何实施这样的程序?

任何帮助真的很感谢!

回答

9

在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 
+0

或者您可以使用“tail -F”。 – 2009-01-13 19:47:03

+0

优秀点 - 我不知道那个选项 – kdgregory 2009-01-13 19:51:07

+1

我已经知道unix管理员谁做了同样的事情,用于检测登录作为他们的boxen根。如果有人以root身份登录,则会将电子邮件发送到其传呼机。非常有用,但偶尔会有趣,因为每次他们进行严格的维护并打开一个root shell时,他们会得到一个页面... – 2009-01-13 20:02:21

4

设置一个命名管道,并建立一个日志文件解析器来侦听它,并发送ssh消息给它。日志文件解析器可以做你想做的事情,或者发信号给守护进程去做。

重定向日志文件是在/ etc /中的配置文件中完成的,该文件的名称现在就让我感觉不到了。 /etc/syslog.conf,我想。

13

保罗汤布林有正确的建议。

设置日志记录在你的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。

+0

是的,这几乎就是我在上一份工作中所做的,除了我用perl来看管道。我会发布更多的细节,除了我的源代码在家。 – 2009-01-13 20:17:52

5

如果你不在乎他们是如何登录的(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

2

我已经制作了一个程序我叫认证显示器),解决了这个问题描述的任务。

如果你想,你以上,欢迎下载研究怎么解决这个问题(使用日志文件)。

你可以在这里免费找到身份验证监视器:http://bwyan.dk/?p=1744

0

我们遇到同样的问题,所以我们编写了自己的脚本。 它可以从github下载。

希望它有帮助:)

干杯! Ivan