我们希望为应用程序测试启用实时网络跟踪。
我们希望在运行 tcpdump 的远程主机上授予尽可能少的权限/权利。
因此我尝试设置一个用于登录的授权密钥。
command="sudo tcpdump -n -i eth0 -s 65535 -w -" ssh-rsa AAAAB3NzaC....
当我从客户端计算机连接并使用时
ssh -i private.key [email protected] | wireshark -S -k -i -
Wireshark 抱怨并说“无法识别的 pcap 格式”
当我们运行
ssh -i private.key [email protected] "tcpdump -i eth0 -w -" | wireshark -S -k -i -
并从授权密钥中删除命令“...”就可以了!
这两个变体有什么区别?如果我在两种情况下都删除“| wireshark...”,我就会在终端中看到二进制数据向我涌来...
如果存在差异,导致无论如何都无法实现这一点,你们知道在服务器端可以以某种方式预定义命令的方法吗?
正如我在一开始试图解释的那样,运行 wireshark 的客户端机器应受到尽可能的限制。
感谢您的帮助!
答案1
在第一种情况下,它是带有伪终端的正常 ssh 会话。
如果您只想要数据(不想要终端控制字符和类似的东西),您应该尝试ssh
使用-T
开关。
实现相同行为的另一种解决方案是将其放在文件no-pty
中的命令旁边authorized_keys
(感谢@mykel):
command="sudo tcpdump -n -i eth0 -s 65535 -w -",no-pty ssh-rsa AAAAB3NzaC....