记录通过 SSH 执行的命令

记录通过 SSH 执行的命令

我想要记录通过 SSH 执行的所有命令。

说,

ssh [email protected] COMMAND

我想在 server.com 上记录“COMMAND”

我确实进行了广泛搜索,但没有找到任何东西。

还有一个类似的问题,但我认为那里没有解决方案。

如何记录“通过 SSH 进行远程执行”

我可以通过

pstree -p | grep ssh

我确实尝试了 Snoopy、auditd 和 sudosh,但无法通过 SSH 记录这些命令。

有一个http://freecode.com/projects/shwatchr,但我无法下载脚本进行测试。

还有其他方法可以完成此任务吗?

答案1

我在我的服务器 Suse 实验室中使用此选项进行了测试并且有效,但也许有更好的方法。

ForceCommand logger -p user.notice "$SSH_ORIGINAL_COMMAND"

答案2

不要专注于 SSH,退一步考虑使用 auditd。我假设您真正想要的是跟踪用户,而不是跟踪通过 SSH 执行的操作(与其他类型的登录不同)。

man auditctl应该给你一个起点。

答案3

我找到了一种方法来做到这一点。有一个由约翰·M·辛普森https://www.jms1.net/)。

你所要做的就是添加

command="#{path to log-session}"

在 ~/.ssh/authorized_keys 中的每个密钥之前

它仅当您拥有无密码 ssh 时才有效,但这确实在一定程度上解决了我的目的。

http://www.jms1.net/log-session

答案4

就我而言,我有完全相同的要求。这种方法的唯一缺点是,如果您不使用 ssh 密钥,我不确定如何使其工作。我编写了一个简短的 bash 脚本来在执行命令之前记录命令:

#!/bin/bash
echo "$(date -Is) ${SSH_ORIGINAL_COMMAND}" >> ~/sshcommands.log
sh "${SSH_ORIGINAL_COMMAND}"

我将此命令保存到 ~/bin/log-commands 然后使其可执行(chmod +x ~/bin/log-commands)。

在 authorized_keys 文件中,我将command=参数添加到我想要记录日志的 SSH 密钥所在的行,因此它将被强制运行 log-commands 脚本:

命令=“/home/tricky/bin/log-commands” ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ......6J0C1 [电子邮件保护]

如果有人知道日志记录但不想让您看到命令,他们只需进入交互式会话即可。正如您所提到的,您已经尝试过 snoopy,它可以为您完成此操作。我还没有尝试过的流行替代方案是 rootsh、sudosh 和 log-user-session。

相关内容