[英]Snooping on pseudo terminal
我想編寫一個程序,可以在不影響原始終端的情況下捕獲偽終端的輸入/輸出。 它可以比作將script
指向/dev/pts/<n>
。
用例:用戶 ssh 進入我的機器並運行一個交互式工具。 通過審計,我可以看到正在運行的命令,但我還需要查看輸出。 我可以在/dev/pts/<n>
上收聽,但是原始登錄用戶沒有得到輸出。
我想編寫自己的程序來處理這種情況。 這個問題真的可以解決嗎,如果可以,我應該在哪里尋找解決方案?
這可以通過在 ssh 服務器進程上使用ptrace(2)
,該進程處理偽終端的主端(通常是在終端中運行的 shell 的父進程)。
您可以從本身使用ptrace(2)
strace
開始,例如
strace -p <pid> -e trace=read,write \
-e read=<fds opened to /dev/ptmx> \
-e write=<fds opened to /dev/ptmx>
這將向您顯示讀取或寫入該偽終端的所有內容。 您可以從ls -l /proc/<pid>/fd
獲取“打開到 /dev/ptmx 的 fds”。
然后,您可以查看strace
正在做什么——例如,通過使用
strace -e trace=ptrace,process_vm_readv strace ...
並通過研究其源代碼。
您當然可以修改 ssh 服務器本身以記錄所有這些信息,或者只是調整其配置選項(例如LogLevel
- 可以在每個用戶或連接主機的基礎上進行修改)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.