我想要记录通过 SSH 执行的所有命令。
说,
ssh [email protected] COMMAND
我想在 server.com 上记录“COMMAND”
我确实进行了广泛搜索,但没有找到任何东西。
还有一个类似的问题,但我认为那里没有解决方案。
我可以通过
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 时才有效,但这确实在一定程度上解决了我的目的。
答案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。