情况
我想使用 Wireshark 来分析我们一台服务器上的流量,但我不想在服务器本身上安装 Wireshark。我明白我可以管道 tcpdump 流量通过 SSH 连接到安装了 Wireshark 的本地计算机 (Ubuntu)。
问题
我无法使用 root 帐户登录服务器,因为该帐户已被禁用。我有 sudo 权限,但登录服务器后该命令sudo tcpdump
不起作用。下面的命令(带或不带 sudo)将不起作用:
$ ssh [email protected] "sudo tcpdump -s 0 -U -n -w - -i eth0 not port 22" > /tmp/remote
问题
有办法让它发挥作用吗?如果是这样 - 怎么办?
答案1
没有sudo
该命令没有捕获设备的权限:
tcpdump: eth0: 您无权在该设备上捕获
但是使用sudo
它,但在之后运行,它永远不会在远程服务器上ssh
获取密码输入,因此解决方案是使用( ) 和管道密码,如下所示:sudo
-S
man sudo
sudo
ssh [email protected] "echo sudo_password | sudo -S tcpdump -s 0 -U -n -w - -i eth0 not port 22" > /tmp/remote"
一方面,这有利于自动化,无需获取sudo
密码提示,并且要拥有完全自动化的代码/脚本,您可以添加sshpass -p password ssh...
.
但是,在服务器上,其他人可以轻松读取ssh
会话期间以开放文本形式提供的 sudo 密码,从安全角度来看,不建议这样做。所以,要拥有sudo
并ssh
安全使用ssh -t
例如,-t
不可能进行管道传输,但可以使用 -S 和回显密码,例如ssh "sudo command"| command
ssh -t server "cd path/to/directory && sudo"|grep "text"
ssh server 'echo password | sudo -S ls -l'| grep 'a'
答案2
您可以在服务器上通过 sudo 运行此命令来首先捕获数据,然后将生成的文件发送回您的工作站以查看数据
sudo tcpdump -i eth0 -s 65535 -w /tmp/wireshark