我们正在 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 的“一对多”远程处理