MIR*_*MIX 4 c linux ssh terminal
我尝试在 C 中使用以下代码连接到 ssh
system("ssh DestinationPC")
Run Code Online (Sandbox Code Playgroud)
它现在可以工作了,它需要我的密码。发送它的最简单方法是什么,如何使用 C 发送一些终端命令?
任何好的答案或建议将不胜感激!
您需要ssh适当地设置您的密码,例如使用公钥,以避免询问任何密码。任何好的ssh 教程都会解释这一点。
(甚至不要考虑以编程方式发送密码;这是可能的,但非常不安全和丑陋)
然后你要么需要给出一个命令来运行,ssh 例如
int err = system("ssh DestinationPC rm /tmp/badfile.txt")
Run Code Online (Sandbox Code Playgroud)
或者您可以使用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);
Run Code Online (Sandbox Code Playgroud)
但这可能是不安全的。
请务必了解代码注入的含义并小心地尝试避免它。
您可能会构建您的命令字符串(例如使用snprintf(3)。小心(缓冲区溢出、截断、代码注入、参数引用...)。检查进入该命令字符串的每个与输入相关的数据。
您可能对OpenSSL感兴趣。
您还可以使用两个pipe(7) -s(一个用于输入,一个用于来自fork-edssh进程的输出),那么您可能需要一些围绕poll(2) 的事件循环。
一般来说,要非常小心安全问题。
除非你很清楚自己在做什么,否则编码system("ssh DestinationPC……") 通常是一个坏主意(也是灾难的秘诀)。至少记录您的软件何时以及如何执行此操作。也看看MPI
(2016 年 9 月新增)
您可能对libssh感兴趣,而不是ssh使用system或执行某些命令popen...