2016-02-13 87 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

相關問題