2010-01-15 62 views
1

我一直在努力自動ssh進入Linux服務器。什麼是瘋狂的,是我可以創建一個.bat腳本,這將做到這一點,但我必須身體力行才能輸入密碼。CMD.exe C#模擬器?

我已經嘗試使用System.Diagnostics.Process對象在c#中自動執行此操作,但沒有結束。我發現,沒有辦法讓這個對象允許你看到密碼提示。它把每一行都放到那一點,然後不輸出更多的行。

cmd.exe,確實可以讓你在腳本中從流程跳轉到流程;這一切都整合到一個屏幕,只是提示你的東西,如密碼,然後你鍵入它們。

有任何簡單的方法,在C#中,使CMD.EXE認爲你是一個人鍵入它,所以我可以模擬這個編程?否則,System.Diagnostics.Process似乎不提供與輸出密碼提示的進程進行交互的方式。你從來沒有看到明確發生的提示,當您在運行CMD.EXE同樣的事情

+3

你有沒有考慮設置SSH密鑰以避免密碼問題? http://oreilly.com/pub/h/66 – dsolimano 2010-01-15 18:46:45

+0

是的,我已經做到了。實施時,批處理文件不會提示。但是,通過System.Diagnostics.Process,該進程在傳遞ssh-authentication密鑰的位置停止輸出行。 – 2010-01-15 21:13:47

+0

也許認證是在另一個進程中執行的,而不是在進程對象中指定的進程。與cmd.exe不同,當進程調用另一個進程時,進程對象失去了被監視的能力。 – 2010-01-15 21:15:36

回答

1

你可以使用

Windows.Forms.SendKeys() 發送密碼擊鍵

Reference Material

+0

問題是,我無法讓C#甚至使密碼提示可用。 System.Diagnostics.Process對象輸出命令行進程的行,直到我期望提示輸出,然後停止輸出行。 – 2010-01-15 21:27:21

+0

該進程正在設置他們等待輸入密碼,並且我無法通過System.Diagnostics.Process訪問提示。 – 2010-01-15 21:28:12

2

cmd.exe不是SSH客戶端;它只是一個殼。探索實際客戶端的功能。在PuTTY(非常受歡迎!)中,如果您有SSH密鑰,則會有自動登錄功能。

+0

同意。你真的需要看看SSH密鑰。它們提供了一種通過SSH登錄的安全方式,無需在每種方式中輸入密碼。 – GnomeCubed 2010-01-15 19:33:50

+0

我已經實現了密鑰。他們在cmd.exe中工作,但在c#的System.Diagnostics.Process對象中,所有輸出(可通過此過程對象訪問)在ssh-key-authentication之前(或之中)停止。但是,當我雙擊一個.bat文件時,輸出會繼續執行驗證。 – 2010-01-15 21:49:10

+0

如果我使用相同的.bat文件(不掛斷),作爲我的System.Diagnostics.Process.Filename,過程對象無法在認證後輸出行。 – 2010-01-15 21:51:04

1

不知道您使用哪個命令行工具ssh到服務器,沒有提供密碼的命令行參數。

C:\> ssh [email protected] -p password 

或者你試圖輸入重定向:

ssh [email protected] < 
Yourpassword 
EOF 

在尋找到你的earlier問題,什麼是您使用的編程接口都具有麻煩?

你確定你需要一個完整的SSH客戶端,或者你只是想遠程執行一個命令。如果是後者,則可能需要退出plink

+0

不,ssh不允許將密碼作爲參數輸入。是的,我試過輸入重定向。也許,問題的實質是,在我進行身份驗證後,我無法繼續進行交互。 – 2010-01-15 21:30:26

+0

即使我無法輸入密碼(通過ssh-key-authentication),即使發生身份驗證,我也無法再監視System.Diagnostics.Process對象的行輸出。 – 2010-01-15 21:31:34

+0

這就像在那個時候有一些棘手的安全問題。我是程序員,而不是黑客。也許我將不得不成爲黑客來編寫這個程序! – 2010-01-15 21:33:34