2014-01-13 25 views
0

我能夠使用下面的代碼運行ssh-keygen,但我仍然不清楚如何在SSH-keygen中執行命令。如何使用java運行ssh-keygen.exe中的命令

import java.io.IOException; 
import org.apache.commons.exec.CommandLine; 
import org.apache.commons.exec.DefaultExecutor; 
import org.apache.commons.exec.ExecuteWatchdog; 


public class ApacheRunSSHKEygen { 

/** 
* @param args the command line arguments 
*/ 
public static void main(String[] args) throws IOException { 

    try { 

//  String line = "AcroRd32.exe /p /h " + file.getAbsolutePath(); 
    String line = "C:\\ExecuteSSH\\ssh-keygen.exe -N"; 
    CommandLine cmdLine = CommandLine.parse(line); 
    DefaultExecutor executor = new DefaultExecutor(); 

    //watchdog 
    executor.setExitValue(1); 
    ExecuteWatchdog watchdog = new ExecuteWatchdog(60000); 
    executor.setWatchdog(watchdog); 

    int exitValue = executor.execute(cmdLine); 
    } 

    catch (Exception exc){ 

     System.out.println("error" + exc);/*handle exception*/} 
    } 


} 

輸出爲:

SSH-密鑰生成:選項需要一個參數 - N的

用法:SSH-密鑰生成[選項]

選項:

-a試驗用於篩選DH-GEX模量的試驗次數。

-B顯示密鑰文件的bubblebabble摘要。

-b位要創建的密鑰中的位數。

....... .......

-y讀取私鑰文件並打印公鑰。

如果代碼和命令是正確的,則輸出之後應提示輸入密碼。如下所示

生成公共/專用rsa密鑰對。

輸入文件中保存密鑰 (/cygdrive/c/Users/USER/.ssh/id_rsa):

輸入密碼:

+0

夥計們,至少我可以通過鏈接方向文檔來運行cmd命令行。謝謝:) – Learner

+0

輸出結果告訴你做了什麼錯誤:'-N'選項必須跟一個參數。如果您想要命令提示輸入密碼,請不要包含-N。 – VGR

+0

感謝VGR,但爲什麼當我運行ssh-keygen.exe時,它會在 生成公共/專用RSA密鑰對後凍結。 輸入要保存密鑰的文件(/cygdrive/c/Users/USER/.ssh/id_rsa): 有什麼想法? – Learner

回答

0

外殼採用抱怨你沒」使用「-N」參數傳遞密碼短語。您可以將密碼和文件添加到您的命令,使其正常工作,這樣的事情

String line = "C:\\ExecuteSSH\\ssh-keygen.exe -N \"my_passphrase_is_poopydiapers\" -f /tmp/mykey"; 

你也可以離開「-N」關,只是EXEC SSH-的keygen.exe不帶任何參數,以獲得輸出你說你期望在你的文章。但是,您必須通過STDIN提供口令並將其輸入到DefaultExecutor,這比在命令行中指定該信息要困難得多。

+0

感謝ireeder,同意你和VGR。 – Learner

+0

@ user3117780如果它是最好的,請接受這個答案。 – lreeder

+0

Ireeder謝謝你爲我工作。感謝大家的幫助。好吧,我已經接受你的答案。 – Learner