Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过C代码使用ssh_C_Linux_Ssh_Terminal - Fatal编程技术网

通过C代码使用ssh

通过C代码使用ssh,c,linux,ssh,terminal,C,Linux,Ssh,Terminal,我尝试使用C中的以下代码连接到ssh system("ssh DestinationPC") 它现在可以工作了,它需要我的密码。最简单的发送方式是什么?如何使用C发送一些终端命令 任何好的回答或建议都将不胜感激 您需要适当地设置ssh,例如使用公钥,以避免询问任何密码。任何好的解释 (甚至不要考虑通过编程发送密码;这是可能的,但非常不安全且难看) 然后,您需要发出一个命令,以便通过ssh运行 int err = system("ssh DestinationPC rm /tmp/badf

我尝试使用C中的以下代码连接到ssh

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


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

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

(甚至不要考虑通过编程发送密码;这是可能的,但非常不安全且难看)

然后,您需要发出一个命令,以便通过
ssh
运行

 int err = system("ssh DestinationPC rm /tmp/badfile.txt")
或者,您可以使用发送多个命令(需要重定向输出):

但这可能是不安全的

一定要明白这意味着什么,并小心地避免它

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

你可能会对它感兴趣

您还可以使用两个-s(一个用于输入,一个用于从
fork
-ed
ssh
进程输出),然后您可能需要一些

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

除非您很清楚自己在做什么,否则编码
系统(“ssh DestinationPC
通常是一个坏主意(也是灾难的一个原因)。至少记录您的软件是何时以及如何做的。还要查看

附录 (2016年9月新增)


您可能会感兴趣,而不是使用
system
popen
执行一些
ssh
命令,重新使用
popen()
已完成对ssh-client的写入。这就是为什么我重定向到
remoteoutput.txt
哦,是的,很好。我忽略了这一点,抱歉。为什么要尝试这样做?请编辑您的问题以解释更多实际的使用情况。请解释更多您为什么要这样做,以及您打算运行的远程命令的具体内容。它有味道很糟糕。我将否决这个问题,因为你没有解释背景和你为什么要这样做。可能还有其他更好的方法来实现你的目标。
 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);