2016-04-27 35 views
2

私のMacBookでSSH接続を設定するJavaプログラムを作成しようとしています。それは私にユーザー名とIPアドレスを入力するよう促し、 "ssh username @ ip"を実行することになっています。以下は プログラムを実行できません "..."エラー= 2、そのようなファイルやディレクトリはありません(java)

が私のコードです:の目的のために

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 

:私は知っている

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"); 
    } 
} 
} 

、その厄介な、と今もインデントが、代わりにコマンドを実行する、それが私にこれを提供しますこの投稿ではIPアドレスを削除しましたが、コンパイルして実行すると実際のものが試され、同じエラーが出ます。

ヘルプ?

+0

'のLS -l/binに/ bash'リターンを何? – Tunaki

+0

@Tunaki、それは-r-xr-xr-xを返します。ルートホイール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配列は、単一の値、すなわち文字列が含まれ、 "/ binに/ bashのは、-c、SSHを..."。 Javaはその名前のファイルを実行しようとしていますが、失敗しています。

あなたは、おそらく代わりに、単一の文字列で、文字列のシーケンスとして、コマンドとその引数を含むcommandを構築することを目的:

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

私は何を提案しますか? "/ bin/bash"、 "-c"、 "ssh" + SSHStartupというコマンドでファイルを作成する必要がありますか? – Spud

+0

私の答えの最後の行が見えますか?第2のコードブロック?それはあなたがすべきことです。 – Kenster

+0

申し訳ありませんが、2組の ""が私に1時間以上の欲求不満を引き起こす可能性があることは分かりませんでした。私の問題を解決してくれてありがとう! :) – Spud