适用于Linux的SSH“登录监视器”

时间:2009-01-13 19:31:38

标签: linux ssh

我正在尝试编写一个脚本,当有人通过ssh登录机器时通知用户。

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

但这既不优雅也不高效。有没有人更好地了解如何实施这样的程序?

真的很感激任何帮助!

6 个答案:

答案 0 :(得分:13)

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 =&gt; /etc/newsyslog.conf; Ubuntu:/etc/event.d不是inittab)

这是非常简陋和缺乏的,但应该足以让你开始......

更多信息:man sshd_config获取更多日志记录选项/详细程度。

答案 1 :(得分:9)

在Ubuntu上(我猜所有其他Debian发行版,如果不是所有的Linuces),文件/var/log/auth.log记录成功(和不成功)的登录尝试:

sshd[XXX]: pam_unix(sshd:session): session opened for user XXX

您可以使用此命令设置一个非常简单的监视器(请注意,您必须是root用户才能查看身份验证日志):

sudo tail -F /var/log/auth.log | grep sshd

答案 2 :(得分:5)

如果你不在乎他们如何登录(telnet / ssh),那么'last'Unix命令行实用程序会显示机器中的最后几次登录。远程用户将显示IP地址

[root @ ex02 www] #last foo pts / 1 81.31.x.y Sun Jan 18 07:25仍然登录
foo pts / 0 81.31.x.y Sun Jan 18 01:51仍然登录
foo pts / 0 81.31.x.y Sat Jan 17 03:51 - 07:52(04:00)
bar pts / 5 199.146.x.y Fri Jan 16 08:57 - 13:29(04:32

答案 3 :(得分:4)

设置命名管道,并设置日志文件解析器以监听它,并将ssh消息发送给它。日志文件解析器可以执行您想要的操作,或者向守护程序发出信号以执行此操作。

重定向日志文件是在/ etc /中的配置文件中完成的,其名称现在正在逃避。 /etc/syslog.conf,我想。

答案 4 :(得分:2)

我制作了一个程序(我称之为Authentication Monitor),它解决了问题中描述的任务。

如果您愿意,我们非常欢迎您下载它以调查我如何解决此问题(使用日志文件)。

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

答案 5 :(得分:0)

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

希望有所帮助:)

喝彩! 伊万