如何显示通过 ssh 执行的命令及其用户的 IP?

zie*_*ied 7 linux shell networking bash ssh

之前问过一个问题,但是没有得到满意的答案: 如何显示从另一台机器执行的ssh命令?

所以这次我会问清楚。

如何显示通过 SSH 在我的服务器中执行的命令及其用户/IP。我正在寻找这样的东西:

#tail .bash_history 192.168.1.101 : vi /etc/ssh/sshd_config 192.168.1.102 : ls -l 192.168.1.101 : cd .ssh 192.168.1.101 : systemctl reload sshd.service 192.168.1.102 : service --status-all 等等...

小智 3

发现这个问题很有趣,所以我用谷歌搜索了一下,找到了这个

更准确地说,您需要将此行添加到 sshd_config 中。

ForceCommand logger -p user.notice "$SSH_ORIGINAL_COMMAND"
Run Code Online (Sandbox Code Playgroud)

根据man sshd_config

ForceCommand
强制执行由 ForceCommand 指定的命令,忽略客户端和 ~/.ssh/rc(如果存在)提供的任何命令。该命令是通过使用用户的登录 shell 和 -c 选项来调用的。这适用于 shell、命令或子系统执行。它在 Match 块内最有用。客户端最初提供的命令可在 SSH_ORIGINAL_COMMAND 环境变量中找到。指定internal-sftp命令将强制使用进程内SFTP服务器,与ChrootDirectory一起使用时不需要支持文件。默认值是无。

在我的 Debian rsyslog 安装中 user.* 被写入/var/log/user.log


请注意,上面的命令将logger在原始命令的位置执行该命令。如果您想记录命令然后执行它,您必须按照以下方式执行某些操作(假设bash可用/bin/bash):

ForceCommand /bin/bash -rc 'logger -p user.notice "$SSH_ORIGINAL_COMMAND"; $SSH_ORIGINAL_COMMAND'
Run Code Online (Sandbox Code Playgroud)

或者使用比受限 shell 更具限制性的包装脚本,或者 - 对于交互式登录 - sshrc( /etc/ssh/sshrc) 文件可能是实现日志记录的另一个选项。