我正在尝试将所有 Linux Shell 命令捕获到某个文件中。我尝试使用auditd服务,但它没有给我想要的输出。
我搜索了一下,发现了一些不错的解决方案。
步骤 1:vi /etc/bashrc 并在末尾添加以下行:
export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$(whoami) [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"'
第2步:
通过在 /etc/rsyslog.conf 文件中添加以下行,将 syslogger 设置为将 local6 捕获到日志文件中:
local6.* /var/log/cmdlog.log
输出是:
1 月 10 日 11:05:20 itdev-server eddiem: root [7310]: vim /etc/rsyslog.conf [0]
这是一个非常好的解决方案,适合我的需要,但我有一些无法解决的问题。
1)如何忽略“Enter”按钮,每次按Enter按钮时都会记录最后一个命令。
2)当您 ssh 到另一台服务器时,它不会记录 ssh 命令,直到您断开会话,但更重要的是,它不会捕获在远程主机上运行的命令。
如果有人有解决方案或解决方法,那就太好了!
提前致谢。
埃迪·M
答案1
该script
命令可能对您有用。它捕捉到一切在会话中并将其写入文件(typescript
默认情况下)。
$ script
Script started, file is typescript
$ date
10 Jan 2016 12:45:59
$ id
uid=1000(roaima) gid=50(staff)...
$ exit
exit
Script done, file is typescript
$ sed 's/^/| /' typescript # cat typescript, with "|" on front of each line
| Script started on 10 Jan 2016 12:45:56
| $ date
| 10 Jan 2016 12:45:59
| $ id
| uid=1000(roaima) gid=50(staff)...
| $ exit
| exit
|
| Script done on 10 Jan 2016 12:46:03