对于一个新项目,我们正在设置一个将运行多个进程的 Linux 机器。为了更好地回溯或回滚配置,我们希望保留在终端上和通过 ssh输入的所有命令的持久历史记录,并将所有输出保存到 stdout/err 到日志文件中。
如果我们让历史持久化,我们可以得到这样的结果:
1 history
2 ls
3 ps
4 ll
5 echo "hi"
6 history
并将相应的输出保存到名为1.log
,2.log
等的日志文件中。显然,输出不仅应该在日志文件中,还应该显示出来。
以编程方式可视化我希望输入的每个命令都自动表现如下:
command > /log/$(len(history)).txt 2&>; echo /log/$(len(history-1)).txt
但在某种程度上,我仍然可以实时看到发生的事情并与 CLI 等进行交互。
有没有办法像这样配置 bash 或任何其他方式来在 Linux 中为 SSH 会话和本地工作获得这种行为?
您可能会想要查看
auditd
,这是一个专门设计用于执行此操作的守护程序。或者,正如您所发现的,您可以使用 bash 历史记录,并增加
HISTSIZE
/HISTFILESIZE
变量以使其保留每个命令。编辑:见https://serverfault.com/questions/470755/log-all-commands-run-by-admins-on-production-servers
为终端上显示的所有内容制作打字稿的常用方法是使用 script 命令。但是,此命令不处理标准错误。
另一种方法 是使用带有& 重定向和exec的进程替换:
$log_file
将包含脚本和任何子流程的输出,并且输出也将打印到屏幕上。在哪里:
>(...)
启动进程...
并返回一个代表其标准输入的文件。exec &> ...
将标准输出和标准错误重定向到...
脚本的其余部分。仅用于exec > ...
标准输出。tee -a
将其标准输入附加到文件中,并将其打印到屏幕上。