通过C代码使用ssh
我尝试使用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
system("ssh DestinationPC")
它现在可以工作了,它需要我的密码。最简单的发送方式是什么?如何使用C发送一些终端命令
任何好的回答或建议都将不胜感激 您需要适当地设置
ssh
,例如使用公钥,以避免询问任何密码。任何好的解释
(甚至不要考虑通过编程发送密码;这是可能的,但非常不安全且难看)
然后,您需要发出一个命令,以便通过ssh
运行
int err = system("ssh DestinationPC rm /tmp/badfile.txt")
或者,您可以使用发送多个命令(需要重定向输出):
但这可能是不安全的
一定要明白这意味着什么,并小心地避免它
您可能会构造命令字符串(例如,使用.小心(缓冲区溢出、截断、代码注入、参数引用…)。检查进入该命令字符串的每个输入相关数据
你可能会对它感兴趣
您还可以使用两个-s(一个用于输入,一个用于从fork
-edssh
进程输出),然后您可能需要一些
一般来说,在安全问题上要非常小心
除非您很清楚自己在做什么,否则编码系统(“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);