适用于Linux的SSH"登录监视器"

Chr*_*ris 7 linux ssh

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

我目前的想法是在间隔中使用grep解析"w"的输出.

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

真的很感激任何帮助!

mjy*_*mjy 13

Paul Tomblin有正确的建议.

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

=>请参阅man 3 syslog以获取更多设施.选择一个像例如

# Logging
SyslogFacility local5
LogLevel INFO
Run Code Online (Sandbox Code Playgroud)

然后像这样设置你的syslog.conf:

local5.info    |/var/run/mysshwatcher.pipe
Run Code Online (Sandbox Code Playgroud)

将要写入的脚本添加到/ etc/inittab,以便它继续运行:

sw0:2345:respawn:/usr/local/bin/mysshwatcher.sh
Run Code Online (Sandbox Code Playgroud)

然后编写你的脚本:

#!/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;
Run Code Online (Sandbox Code Playgroud)

最后,重新启动syslogd并重新加载inittab(init q),它应该可以工作.如果使用这些服务的其他variantes,则需要相应地配置(例如newsyslogd => /etc/newsyslog.conf; Ubuntu:/etc/event.d不是inittab)

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

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


kdg*_*ory 9

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

sshd[XXX]: pam_unix(sshd:session): session opened for user XXX
Run Code Online (Sandbox Code Playgroud)

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

sudo tail -F /var/log/auth.log | grep sshd
Run Code Online (Sandbox Code Playgroud)


Dan*_*pez 5

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