是否可以使用 pexpect 生成将显示在 bash 历史记录中的 bash shell 命令?

Is it possible to use pexpect to generate bash shell commands that will show up in bash history?

作为系统管理员,我正在尝试在虚拟机上模拟用户以测试日志文件监控。

模拟用户将自动执行应显示在 bash 历史、"ls"、"cd"、"touch" 等中的各种任务。重要的是它们出现在 bash 历史记录中,因为记录了 bash 历史记录。

我考虑过直接写入 bash 历史记录,但更愿意更准确地模拟用户行为。原因是 bash 历史记录不是唯一被监视的日志文件,如果同一事件的日志保持同步会更好。

详情 我正在使用 CentOS Linux 7.3.1611 版 Python 2.7.5 已安装

我已经尝试使用pexpect.run('ls')或pexpect.spawn('ls'),'ls'没有出现在bash 使用任一命令的历史记录。

Bash 日志记录仅适用于交互式 shell。这将打开一个包含 Bash 和 运行 ls 的交互式会话,尽管如果将 .bashrc 自定义为更改 PS1.[=19=,它可能会失败]

child = pexpect.spawn('bash')
child.expect(r'$')
child.sendline('ls')
child.expect(r'$')
child.close()

话虽如此,Bash 历史很容易被绕过。它仅在交互式会话结束时写入,并且可以在会话期间更改,因此

$ rm very_important_file
$ history -c

$ kill -9 $$

不会出现在.bash_history中。这甚至在 restricted Bash.

中也是可能的

如果你需要更可靠的东西,我建议设置system auditing

简短的回答似乎是不,你不能满怀期待地做到这一点。

Auditd 是跟踪用户输入的一种可能的替代方法,但我还没有弄清楚如何让它记录 'ls' 和 'cd' 等命令,因为它们不调用系统 execve( ) 命令。我发现最好的解决方法是使用脚本命令打开另一个交互式终端,其中记录了提示中输入的每个命令。您可以使用脚本命令输出到的文件(默认情况下是打字稿)来记录所有用户命令。