使用ssh在远程机器上Netcat

Netcat on remote machine using ssh

本文关键字:机器 Netcat ssh 程机器 使用      更新时间:2023-10-16

我试图通过使用ssh运行netcat,似乎我的代码总是在我的C代码中失败。下面是我使用system()按照这个顺序执行的命令。

system("ssh machine 'nc -l 61001|dd bs=64M of=temp' &")
system("/bin/dd if=filename bs=64M|nc IP_address 61001")

我注意到第一个命令在远程机器上创建临时文件时工作正常。第二个dd命令失败,并声明在远程机器上写入了0个字节。当从终端执行这些命令时,它们可以正常工作,但是当我将它们放入c中的system()调用中时,它们就会失败。

简短回答:

一个& disown(而不仅仅是&)应该做。

解释:

system()生成一个shell,它只执行一个命令,然后退出。&告诉shell将命令fork到后台(意思是,它不等待它完成),但它仍然是shell的会话和进程组的一部分。当领队(炮弹)离开时,所有的孩子都被杀死。disown导致shell启动新的进程组,子进程现在由init(系统中的第一个进程)拥有

"真正"答:

这是关于编程的。您正在疯狂地分叉进程,以完成C程序可以使用内置库调用轻松完成的事情(除了ssh,但也有更好的方法)。阅读BSD sockets