9

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

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

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

任何帮助将不胜感激!

4

6 回答 6

13

Paul Tomblin 的建议是正确的。

在您的 sshd_config 中设置日志记录以指向您可以单独记录的系统日志工具:

=> 查看 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),它应该可以工作。如果使用这些服务的其他变体,则需要相应地进行配置(例如 newsyslogd => /etc/newsyslog.conf;Ubuntu:/etc/event.d 而不是 inittab)

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

更多信息:man sshd_config 以获得更多日志记录选项/详细信息。

于 2009-01-13T20:02:07.147 回答
10

在 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
于 2009-01-13T19:46:25.400 回答
5

如果您不关心他们是如何登录的(telnet/ssh),“last”Unix 命令行实用程序会向您显示机器上的最后几次登录。远程用户将显示 IP 地址

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

于 2009-01-18T20:54:58.243 回答
4

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

重定向日志文件是在 /etc/ 中的配置文件中完成的,其名称现在让我无法理解。/etc/syslog.conf,我想。

于 2009-01-13T19:36:34.000 回答
2

我制作了一个程序(我称之为身份验证监视器)来解决问题中描述的任务。

如果您愿意,非常欢迎您下载它来研究我如何解决这个问题(使用日志文件)。

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

于 2013-03-07T08:12:23.740 回答
0

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

希望能帮助到你 :)

干杯!伊万

于 2015-05-22T14:47:45.510 回答