c++ - 使用 ssh 远程机器上的 Netcat

标签 c++ c ssh netcat

我试图通过使用 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 的 session 和进程组的一部分。当组长(shell)退出时,所有 child 都被杀死。 disown 导致 shell 启动新进程组,子进程现在由 init(系统中的第一个进程)拥有

“真实”答案:

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

关于c++ - 使用 ssh 远程机器上的 Netcat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31659439/

相关文章:

c++ - 从 std::vector<cv::Point>::const_iterator 检索值

C:使用具有 "getter"函数和中断的静态 volatile

c - 我从 C - Linux 中的 .txt 文件中得到错误的输出

c - Linux平台下C程序如何调用ssh退出?

git - 将 ssh 代理套接字转发到 docker build

c++ - 如何重置 std::count 返回值

c++ - 函数中的内存释放 (C++)

c++程序不工作

django - django 启动时使用 paramiko 来隧道化 MySql 端口

bash - 无法完全关闭脚本导出中的远程SSH隧道