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

标签 python linux bash shell pexpect

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

模拟用户将自动执行应显示在 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 的交互式 session 并在其中运行 ls,但如果 .bashrc 被自定义为更改 PS1,它可能会失败。

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

也就是说,Bash 历史很容易被绕过。它仅在交互式 session 结束时写入,并且可以在 session 期间更改,因此

$ rm very_important_file
$ history -c

$ kill -9 $$

不会出现在 .bash_history 中。这甚至在 restricted Bash 中也是可能的.

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

关于python - 是否可以使用 pexpect 生成将显示在 bash 历史记录中的 bash shell 命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45646104/

相关文章:

python - 如何配置 VS Code pytest 扩展以在集成终端(而不是集成输出)中显示测试结果?

android - Linux - 如何使用 Gradle 为 android studio 安装 osmdroid 库?

linux - 模式匹配在 bash 脚本中不起作用

linux - 我应该使用 Docker 在 Linux 操作系统中创建 Linux 操作系统吗?

监视文件夹内文件更改的 linux 脚本(就像 autospec 一样!)

bash - 检查 while 循环中的 BASH 字符串是否有单引号?

python - 使用 numpy 方法计算核矩阵

python - 如何从 sqlalchemy 获取元数据以在 jinja 中显示为表格?

Python,PIP,线分析器的构建轮失败

linux - 为什么 stat mtime 每秒只更新两次?