通过 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 感兴趣,而不是使用 system
或 popen
...
执行某些 ssh
命令
我尝试在 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 感兴趣,而不是使用 system
或 popen
...
ssh
命令