我一直在寻找一种记录命令历史的详细信息的方法。我的主要目的是为了在调试应用程序问题时构建大致的服务器时间线,以便记录已发出的命令。 这不是为了高度详细的审计目的。 我看到了这篇文章,其中提出了一种修改PROMPT_COMMAND
以增强每个命令的history
日志的方法。它建议将以下内容添加到~/.bashrc
文件中:
export PROMPT_COMMAND='hpwd=$(history 1); hpwd="${hpwd# *[0-9]* }"; if [[ ${hpwd%% *} == "cd" ]]; then cwd=$OLDPWD; else cwd=$PWD; fi; hpwd="${hpwd% ### *} ### $cwd"; history -s "$hpwd"'
这个方法非常好用,但是只有在发出
PS1
提示符时才会生效。有没有办法让它适用于非交互式的shell(我想这应该是正确的术语)?例如,我想要:
ssh host "ls | grep home"
为了在
host
上创建一个与ls | grep home
相同的条目,但由于这不是通过PS1
提示完成的,所以所链接的解决方案存在缺陷。我稍微研究了一下
auditd
。它是一个很好的实用工具,但详细程度远超出我的需要。我可以轻松地解析日志,但管道、重定向和循环成为了一个噩梦,要让它们变成像history
报告的那样美观,就会变得非常复杂。
shout
,对吗?有基于主机的解决方案吗? - JaredCbash
或sshd
来进行日志记录。 - tripleeeexec /bin/bash $@
,最终我为特定用户制作了一个特殊的 shell。 - JaredC