如何通过 SSHPass 将多个命令传递到远程设备

如何通过 SSHPass 将多个命令传递到远程设备

我正在尝试设置一种方法,可以在某些设备上运行远程 tcpdump,并将文件保存到本地计算机上进行分析(我不想将文件保存在远程设备上,然后将其拉出)因为远程设备的可用空间很小)。

我在我的机器(桥接网络)上设置了一个 Ubuntu VM,其中安装了 SSHPass 并使用它成功完成了此故障排除任务。我在 Ubuntu 机器的终端上使用了如下所示的语法:

sshpass -p <password> ssh -c aes256-ctr <username>@<remote-ip> -p <remote-access-port> "tcpdump -i eth1 -s 0 -nnn -vvv -w - port 53" \ > /home/drew/Desktop/DNS_Capture.pcap

运行上述命令后,我的会话就会连接并开始在远程设备上运行 tcpdump,查看其 DNS 流量。这直接捕获到位于我的 Ubunut VM 桌面上的文件,这正是我想要的。

然而,在我的其他设备上,SSH 会话的主登陆页面不是设备的 Linux shell,而是另一个调试 shell。如果我实际上要通过 CLI 在另一台设备上执行该过程,我将执行以下操作:

ssh <username>@<remote-ip> -p <remote-access-port>
<password> (*at prompt for password after connection)
sh
tcpdump -i eth5.1 -s 0 -nnn -vvv port 53

正如您从上面看到的,我启动了一个“sh”以便将其放入设备的相应 linux shell 中。通过上述内容,我可以根据需要运行捕获,但问题是我无法将其输出保存在 .pcap 文件中。在我尝试解决这个问题的过程中,我尝试了以下方法以使其在其他设备上正常工作:

sshpass -p <password> ssh <username>@<remote-ip> -p <remote-access-port> "sh; tcpdump -i eth5.1 -s 0 -nnn -vvv -w - port 53" \ > /home/drew/Desktop/DNS_Capture.pcap

我在这个论坛上的其他问题上发现,人们通过使用这些命令转义符(例如“;”)成功地传递了多个命令。在我看来,以这种方式设置时,第一个命令甚至没有应用。即使我输入以下内容作为测试来查看是否已登陆正确的 linux shell,它也不会运行第二个命令,并且提示符告诉我仍然处于默认登陆页面:

sshpass -p <password> ssh <username>@<remote-ip> - <remote-access-port> "sh; ifconfig"

答案1

用户@Jesse_b 在他们标记为“相关”的帖子中是正确的:

sshpass 中的多个命令

我之前已经多次看过那篇文章,但事实证明我对这里文档中的语法很糟糕。我能够使用heredoc来让shtcpdump .....命令在一个中传递sshpass

我很抱歉,因为我找不到一种方法来将“相关:...”标记为对此的答案。如果可能的话,我很乐意接受教育,以确保我不会把这些帖子弄得一团糟。

相关内容