当 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 的“一对多”远程处理

相关内容