
我想記錄透過 SSH 執行的所有命令。
說,
ssh [email protected] COMMAND
我想在 server.com 上記錄“COMMAND”
我進行了廣泛的搜索,但找不到任何東西。
還有一個類似的問題,但我認為那裡沒有解決方案。
我可以透過以下方式獲得即時視圖
pstree -p | grep ssh
我確實嘗試過 Snoopy、auditd 和 sudosh,但無法透過 SSH 記錄這些命令。
有一個http://freecode.com/projects/shwatchr,但我無法下載腳本進行測試。
有其他方法可以完成此任務嗎?
答案1
我在我的伺服器 suse 實驗室中使用此選項進行了測試,它有效,但也許有更好的方法。
ForceCommand logger -p user.notice "$SSH_ORIGINAL_COMMAND"
答案2
不要專注於 SSH,而是退一步考慮使用auditd。我假設您真正想要的是追蹤用戶,而不是追蹤 SSH 完成的操作(與其他類型的登入不同)。
man auditctl
應該會給你一個起點。
答案3
我找到了一種方法來做到這一點。有一個perl腳本由約翰·M·辛普森(https://www.jms1.net/)。
您所要做的就是添加
command="#{path to log-session}"
在 ~/.ssh/authorized_keys 中的每個密鑰之前
它僅在您擁有無密碼 ssh 時才有效,但這確實在一定程度上解決了我的目的。
答案4
就我而言,我有完全相同的要求。此方法唯一需要注意的是,如果您不使用 ssh 密鑰,我不確定如何使其工作。我製作了一個簡短的 bash 腳本來在執行命令之前記錄該命令:
#!/bin/bash
echo "$(date -Is) ${SSH_ORIGINAL_COMMAND}" >> ~/sshcommands.log
sh "${SSH_ORIGINAL_COMMAND}"
我將此命令儲存到 ~/bin/log-commands 然後使其可執行 ( chmod +x ~/bin/log-commands
)。
在authorized_keys檔案中,我將command=
參數新增至屬於我想要記錄其日誌的SSH金鑰的行,因此它將被迫執行日誌命令腳本:
指令=“/home/tricky/bin/log-commands”ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ......6J0C1 [電子郵件受保護]
如果有人知道日誌記錄但不希望您看到命令,他們可以簡單地進入互動式會話。正如您所提到的,您已經嘗試過史努比,它會為您做到這一點。我尚未嘗試過的流行替代方案是 rootsh、sudosh 和 log-user-session。