2016-02-13 139 views
0

有人熟悉SSHSystem(const char * command)来执行shell命令!ssh使用系统(char *命令)远程登录到服务器,并执行命令?

我试图从我的C++代码远程登录到多个服务器/机器,我必须远程执行一些命令。据我所知,我决定使用ssh。但是,现在我想通过System(const char * command)加载并发送所有命令。请参见下面我代码..

#include "all my headers" 
int main() 
{ 
    system("ssh 172.10.10.1");//login to server_one, password=123 
    system("ssh 172.10.10.2");//login to server_two, password=1234 
    system("ssh 172.10.10.3");//login to server_three,password=12345 
    system("ssh 172.10.10.4");//login to server_four, password=123456 
    return 0; 
} 

现在,我的问题是:

  1. 我可以加载并在 同时发送服务器和密码的remote_ip,是这样的:system("ssh 172.10.10.4 ,123456")
    密码= 123456?如果是的话,怎么样?
  2. 如果完成上面的(1),我会有另一个问题。谢谢。
+2

这样的硬编码密码是一个坏主意。如果你真的确定要用这种方式做某件事,你应该考虑使用公钥/私钥。 –

+1

['system'](http://man7.org/linux/man-pages/man3/system.3.html)函数只是使用shell来执行命令。所以,如果你能从普通的shell命令提示符下工作,而不需要任何输入,那么你可以很容易地使用'system'在你的程序内部工作。 –

+0

@DavidHoelzer:我知道以简单的方式发送密码是有风险的,但它仅仅用于测试,安全性不是我的问题。谢谢。 –

回答

2

调用system("ssh ...")只有在您为要登录的计算机设置公钥时才会工作。

原因是system()不允许你与你开始的进程进行交互,它只会产生一个新的shell并将相关的字符串传递给shell执行,而ssh本身没有办法通过应用程序的密码,你必须实际输入它(或者如果你使用popen将它发送到ssh的stdin端 - 但我确实建议公钥是在自动化系统中使用的正确方法)。

如果您仍然需要与创建流程交互,你需要使用类似popen,这将让你读stdout或写入stdin的 - 如果你需要做的能力,甚至pipe()fork()东西到stdinstdout