我們正在 unix 中進行遠端捕獲tcpdump
,每當 ssh 被終止(任何中斷,即透過 ctrl c 或任何其他中斷)時,我們需要tcpdump
停止/終止另一端的 ssh。
我們嘗試了列出的大多數選項,用於在 ssh 被終止時終止 SSH 產生的進程。對於 tcpdump ssh 加上 -t 是不可行的,因為它在開頭添加了一行前綴,這是不期望的。
因此,如果有人已經解決過此類問題,我們想知道一些好的解決方案來實現這一目標。
我以 root 身分遠端執行,tcpdump
如下所示:
ssh {remotehost} "tcpdump -i eth0 -s 0 -w - " > /tmp/local_file
謝謝。
答案1
遠端運行它,如果你殺死ssh
進程,另一端應該死。除非你因為某些原因讓這個結局暫停。如果是這種情況,您可能希望將其作為較大腳本的一部分在後台運行。
您也不應該遠端使用 root,而且您當然不需要 root 來執行 ssh。盡可能避免以 root 身分工作。使用有能力的遠端使用者sudo
。
您可能也不需要“w -”,因為預設tcpdump
會寫入標準輸出。
您還可以限制tcpdump
捕獲的資料包數量以更好地控制會話。請注意,您必須從系統中排除連接埠 22,否則ssh
遠端系統將以一種自我回饋的方式擷取當前會話。
因此,要擷取 1000 個資料包,您可以執行以下操作:
$ssh [email protected] "sudo tcpdump -i eth0 -s0 -c 1000 not port 22" > /tmp/local_file
另一個不太乾淨的替代方案是在 pkill 之後運行:
$ssh ..."sudo tcpdump"
$ssh ..."pkill tcpdump"
作為最後一個警告,/tmp
或其所在的根目錄通常位於有限的檔案系統或 RAM 中;在 /tmp 目錄中建立可預測的名稱也會帶來安全風險,特別是作為特權使用者。您可能想要使用另一個位置來儲存擷取檔案。
作為系統管理員,投資ansible
.如需自動化或使用更複雜的工具進行遠端管理,請參閱Linux 相當於 PowerShell 的「一對多」遠端處理