2016-04-27 258 views
2

我想要製作一個Java程序,將爲我在我的MacBook上建立一個SSH連接。它提示我輸入用戶名,然後輸入IP地址,然後輸入「ssh username @ ip」。無法運行程序「...」錯誤= 2,沒有這樣的文件或目錄(java)

下面是我的代碼:

import java.io.BufferedReader; 
import java.io.InputStreamReader; 
import java.util.Scanner; 

public class SSH { 
    public static void main(String[] args) throws Exception { 
    boolean rep = true; 
    String username = (null); 
    String IPAdress = (null); 
    while (rep) { 
     Scanner scanner = new Scanner(System.in); 
     System.out.print("Username: "); 
     username = scanner.next(); 
     System.out.print("\nIP Adress: "); 
     IPAdress = scanner.next(); 
     System.out.println("\n\nIs this correct?\nUsername: " + username + "\nIP Adress: " + IPAdress + "\nY/N"); 
     char responce = scanner.next().charAt(0); 

     if (responce == 'Y' || responce == 'y') { 
      rep = false; 
      scanner.close(); 
     } else if (responce == 'N' || responce == 'n') { 

     } else { 
      Error displayErrorMessage = new Error(); 
      displayErrorMessage.displayError(); 
     } 
    } 
    String SSHStartup = username + "@" + IPAdress; 
    System.out.println("Running command: ssh " + SSHStartup); 
    String[] command = { "/bin/bash, -c , ssh " + SSHStartup }; 
    Process p = Runtime.getRuntime().exec(command); 
    p.waitFor(); 
    BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream())); 
    String line = ""; 
    StringBuffer output = new StringBuffer(); 
    while ((line = reader.readLine()) != null) { 
     output.append(line + "\n"); 
    } 
} 
} 

我知道,它的雜亂,現在好縮進,但不是執行命令,它給了我這樣的:

Exception in thread "main" java.io.IOException: Cannot run program "/bin/bash, -c , ssh [email protected](ip here)": error=2, No such file or directory 
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048) 
at java.lang.Runtime.exec(Runtime.java:620) 
at java.lang.Runtime.exec(Runtime.java:485) 
at SSH.main(SSH.java:32) 
Caused by: java.io.IOException: error=2, No such file or directory 
at java.lang.UNIXProcess.forkAndExec(Native Method) 
at java.lang.UNIXProcess.<init>(UNIXProcess.java:248) 
at java.lang.ProcessImpl.start(ProcessImpl.java:134) 
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029) 
... 3 more 

爲目的這篇文章中,我已經刪除了IP地址,但是當我編譯並運行它時,我嘗試了實際的一個,它給了我同樣的錯誤。

幫助?

+0

什麼'ls -l命令/斌/ bash'回報? – Tunaki

+0

@Tunaki,它返回-r-xr-xr-x 1個根輪628496 Dec 2 22:36/bin/bash – Spud

+0

https://bugs.eclipse.org/bugs/show_bug.cgi?id=509628,有Eclipse長期以來的錯誤。我可以通過在程序本身提及adb的完整路徑來獲得此解決方案。 String [] temp = {「/ Users/vikram-anna/Library/Android/sdk/platform-tools/adb」,「start-server」}; \t \t p = Runtime.getRuntime()。exec(temp); – vikramvi

回答

5
String[] command = { "/bin/bash, -c , ssh " + SSHStartup }; 
Process p = Runtime.getRuntime().exec(command); 

command數組包含一個值,即字符串 「/斌/慶典,-c,SSH ...」。 Java正在嘗試並且無法執行具有該名稱的文件。

你可能是爲了構建包含command命令及其作爲字符串的字符序列參數,而不是一個字符串:

String[] command = { "/bin/bash", "-c", "ssh " + SSHStartup }; 
+0

你會建議我做什麼?我應該使用「/ bin/bash」,「-c」,「ssh」+ SSHStartup命令創建一個文件嗎? – Spud

+0

你在我的答案中看到最後一行嗎?第二個代碼塊?這就是你應該做的。 – Kenster

+0

對不起,我不知道兩對「」可能導致我一個多小時的挫折。感謝您解決我的問題! :) – Spud