Cannot run program “…” error=2, No such file or directory (java)

匿名 (未验证) 提交于 2019-12-03 07:50:05

问题:

I am trying to make a java program that will set up a SSH connection for me on my macbook. It prompts me for the username, and then the IP address, then it is supposed to do "ssh username@ip".

Below is my code:

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

I know, its messy, and now well indented, but instead of executing the command, it gives me this:

Exception in thread "main" java.io.IOException: Cannot run program "/bin/bash, -c , ssh root@(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 

For the purpose of this post, I have removed the IP address, but when I compile and run it, I try the actual one, and it gives me the same error.

Help?

回答1:

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

Your command array contains a single value, namely the string "/bin/bash, -c , ssh ...". Java is trying and failing to execute a file with that name.

You probably intended to construct a command containing the command and its arguments as a sequence of strings, instead of a single string:

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


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!