![](/img/trans.png)
[英]pexpect need to use pipe without starting the bash shell since the bash shell does not understand the command
[英]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'),在任何一個命令的bash歷史記錄中都不會顯示'ls'。
Bash日志記錄僅適用於交互式Shell。 這將打開一個與Bash的交互式會話並在其中運行ls
,盡管如果自定義.bashrc
來更改PS1
可能會失敗。
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
。 即使在受限的Bash中,這也是可能的。
如果您需要更可靠的產品,我建議您設置系統審核 。
簡短的答案似乎是“否”,您無法使用pexpect做到這一點。
審計是跟蹤用戶輸入的一種可能替代方法,但是我還沒有弄清楚如何記錄諸如“ ls”和“ cd”之類的命令,因為它們沒有調用系統execve()命令。 我發現最好的解決方法是使用script命令,該命令將打開另一個交互式終端,其中會記錄提示中輸入的每個命令。 您可以使用腳本命令輸出到的文件(默認為打字稿)記錄所有用戶命令。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.