當 ssh 終止時終止 ssh 產生的 tcpdump 進程

當 ssh 終止時終止 ssh 產生的 tcpdump 進程

我們正在 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 的「一對多」遠端處理

相關內容