如何在客户端机器上记录通过 SSH 执行的所有命令?
假设我正在连接到 example.com 并输入以下命令:
$ ls
$ touch hello
$ mkdir world
$ mv hello world/
我希望我的客户端将所有输入的命令都放在如下文件中:
ls
touch hello
mkdir world
mv hello world/
我的目标是如果我犯了一个错误并破坏了服务器,我仍然可以搜索哪个命令出错了。我无法在~/.bash_logout
断开连接后保存命令,~/.bash_history
因为它是服务器端的。我没有找到任何相关信息,~/.ssh/config
所以我在这里问。
任何想法?
编辑:
更清楚地说,如果我从机器 A 连接到机器 B,我希望在机器 A 上拥有历史文件。
答案1
大多数情况下,这已经存在于你的历史文件中,例如~/.bash_history
答案2
您可以通过 history 或 cat ~/.bash_history 查找您输入的所有命令,或者如果您希望将该命令的输出重定向到文件,您可以输入 cat ~/.bash_history > 您的文件名,您的文件名是您想要在该文件中保存历史记录的文件,或者如果您想从历史记录中查看最后输入的 n 条命令,您可以输入 history | tail -n,并且您可以通过输入 history | tail -n > your_file_name 将它们重定向到文件
答案3
可以通过在/etc/bashrc
文件中添加以下行来完成
PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$(whoami) [$$]: $(history 1 | sed "s/^[ ][0-9]+[ ]//" ) [$RETRN_VAL]"'
您还必须在目录commands.conf
中创建一个文件/etc/rsyslog.d/
,该文件的内容应如下所示:
local6.* /var/log/commands.log
然后重新启动rsyslog
服务所有日志将被捕获/var/log/commands.log