当我运行这个程序时 Linux 如何反应?
ssh root@server 'last | head'
当我运行多个此命令时,我看到以下输出:
root pts/0 MyIPv4 Fri Dec 30 16:17 - 16:17 (00:00)
reboot system boot 5.15.0-56-generi Fri Dec 30 01:03 still running
get pts/1 MyIPv4 Thu Dec 29 10:05 - 10:11 (00:05)
get pts/1 MyIPv4 Thu Dec 29 08:31 - 09:20 (00:48)
root pts/1 MyIPv4 Wed Dec 28 13:12 - 13:34 (00:21)
root pts/1 MyIPv4 Tue Dec 27 21:56 - 21:56 (00:00)
root pts/3 tmux(3176049).%1 Tue Dec 27 09:27 - 09:28 (00:01)
root pts/2 tmux(3176049).%0 Tue Dec 27 09:26 - 09:28 (00:02)
root pts/1 MyIPv4 Tue Dec 27 09:26 - 09:28 (00:02)
root pts/1 MyIPv4 Mon Dec 26 20:33 - 20:35 (00:01)
有什么办法可以查看是否已经使用上述命令登录?
我也检查了这一点,但没有得到结果:
ssh root@server 'history'
ssh root@server 'history | tail'
答案1
一般使用的wtmp日志last
用来记录交互的登录,即与终端 (tty) 关联的登录。(同样,使用的 utmp 文件who
仅列出当前活动的终端会话,而不列出其他登录类型。)
或将分配一个终端并将显示在(utmp) 或(wtmp) 中,但ssh host
或不会。ssh -t host cmd
who
last
ssh host cmd
ssh -T host
换句话说,wtmp 不是身份验证日志或安全审计日志。如果您想要准确记录所有身份验证,请使用 /var/log/auth.log(或类似文件)中的 PAM 日志。
在使用 systemd 的服务器上,loginctl
可能有更准确的会话列表。
答案2
如果指定了命令,它将在远程主机上执行,而不是在登录 shell 上执行。
-SSH 手册页
即,在没有用户登录的情况下运行命令。这就是您的方法不起作用的原因。
但是,SSH 默认会记录所有连接(和连接尝试)。只需journalctl -u ssh.service
在服务器上运行即可检查 smb 何时(尝试)连接到服务器。