通过 C 代码使用 ssh

Using ssh via C code

我尝试在 C

中使用以下代码连接到 ssh
  system("ssh DestinationPC")

它现在可以工作了,它需要我的密码。发送它的最简单方法是什么?我如何使用 C 发送一些终端命令?

任何好的答案或建议都将不胜感激!

您需要适当地设置 ssh,例如使用 public 键,以避免询问任何密码。任何好的ssh tutorial解释。

(甚至不要考虑以编程方式发送密码;这是可能的,但非常不安全且丑陋)

然后您需要通过 ssh 向 运行 发出命令,例如

 int err = system("ssh DestinationPC rm /tmp/badfile.txt")

或者您可以使用 popen(3) 发送多个命令(您需要重定向输出):

 FILE* remf = popen("ssh DestinationPC > remoteoutput.txt", "w");
 if (!remf) { perror("popen ssh failed"); exit(EXIT_FAILURE); };
 fprintf(remf, "gcc somesource.c -Wall -o somebinary\n");
 fprintf(remf, "./somebinary");
 fclose(remf);

但这可能不安全。

请务必理解 code injection 的含义并小心避免。

您可能会构造您的命令字符串(例如使用 snprintf(3)。小心(缓冲区溢出、t运行cation、代码注入、参数引用...)。检查每个与输入相关的进入该命令字符串的数据。

您可能对 OpenSSL 感兴趣。

您也可以使用两个 pipe(7)-s (one for input, one for output from the fork-ed ssh process) then you'll need some event loop probably around poll(2)

一般来说,要非常小心安全问题。

除非您很清楚自己在做什么,否则编码 system("ssh DestinationPC...") 通常是一个 坏主意 (并且会导致灾难) .至少记录您的软件何时以及如何执行此操作。另请查看 MPI

附录

(2016 年 9 月添加)

您可能对 libssh 感兴趣,而不是使用 systempopen...

执行某些 ssh 命令