使用 ssh 远程机器上的 Netcat

Netcat on remote machine using ssh

我试图通过使用 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() 调用中就会失败。

简答:

a & disown(而不仅仅是 &)应该可以。

解释:

system() 产生一个 shell 只执行 一个 命令然后退出。 & 告诉 shell 将命令分叉到后台(意味着它不等待完成),但它仍然是 shell 的会话和进程组的一部分。当组长(shell)退出时,所有child人都被杀死。 disown 导致 shell 启动新进程组,child 进程现在由 init 拥有(第一个进程系统)。

“真实”答案:

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