如果用户通过 ssh 远程执行命令:
[user@remote ~] $ ssh USERNAME@SERVER COMMANDS
管理员如何SERVER
记录COMMANDS
在“非 tty”会话中执行的命令?
另外,当用户调用新的 shell( running /bin/bash from existing bash shell
) 时,在这个新 shell 中执行的命令不会列在用户的 bash 历史记录中;如何记录这些命令?
答案1
只需安装GNU 会计(acct
适用于 Debian/Ubuntu 或psacct
RedHat/CentOS)并使用该命令lastcomm
来跟踪所有用户执行的所有命令。
答案2
SSH 曾经有一个名为“法西斯日志记录”的选项,这个选项似乎已经消失了 - 该选项可以进行按键记录。
现在,即使将 SSHD 的日志记录级别提升到 DEBUG3 也不会显示命令。
但也许你的第二个问题的答案也能解决第一个问题。bash 历史记录附加机制已在接受的答案中进行了描述问题。
答案3
您可以使用 SSHLog 记录这些命令https://github.com/sshlog/agent/(我是一名贡献者)。
该应用程序将捕获所有命令(包括您在问题中引用的通过 bash 的管道)。它还将记录通过 TTY 输入的命令和未通过 TTY 发送的命令。以下是用户通过 ssh 进入服务器并运行的示例:
bash
whoami
exit
日志文件将显示:
2023-04-18 16:47:59 command_start (2554513) jdoe executed /usr/bin/bash
2023-04-18 16:48:00 command_start (2554513) jdoe executed /usr/bin/whoami
2023-04-18 16:48:00 command_finish (2554513) jdoe execute complete (exit code: 0) /usr/bin/whoami
2023-04-18 16:48:10 command_finish (2554513) jdoe execute complete (exit code: 0) /usr/bin/bash
注意 bash 终端打开了,“whoami”在新终端内运行,当 bash 最终关闭时,它会报告命令的完成。