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

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

我之前问过一个问题,但没有得到满意的答案: 如何显示从另一台机器执行的 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-allETC...

答案1

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

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

ForceCommand logger -p user.notice "$SSH_ORIGINAL_COMMAND"

根据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'

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

答案2

尝试这个 (https://askubuntu.com/questions/93566/how-to-log-all-bash-commands-by-all-users-on-a-server)。编辑/etc/bash.bashrc文件并添加行

export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$(whoami) [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"'

位于文件底部并保存。

相关内容