Подтвердить что ты не робот

Как запустить SSH-команды на удаленной системе с помощью Java?

Я новичок в этом Java-приложении и ищу пример кода для подключения к удаленному серверу с использованием SSH, выполнения команд и получения вывода с использованием Java в качестве языка программирования.

4b9b3361

Ответ 1

Посмотрите на Runtime.exec() Javadoc

Process p = Runtime.getRuntime().exec("ssh myhost");
PrintStream out = new PrintStream(p.getOutputStream());
BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));

out.println("ls -l /home/me");
while (in.ready()) {
  String s = in.readLine();
  System.out.println(s);
}
out.println("exit");

p.waitFor();

Ответ 2

JSch - это чистая реализация Java SSH2, которая помогает запускать команды на удаленных машинах. Вы можете найти здесь здесь, и есть несколько примеров здесь.

Вы можете использовать exec.java.

Ответ 3

Вы можете взглянуть на эту основанную на Java фреймворк для выполнения удаленной команды, в том числе. через SSH: https://github.com/jkovacic/remote-exec Он опирается на две библиотеки SSH с открытым исходным кодом, либо JSch (для этой реализации поддерживается даже аутентификация ECDSA), либо Ganymed (достаточно одной из этих двух библиотек). На первый взгляд это может показаться немного сложным, вам придется подготовить множество классов, связанных с SSH (предоставление информации о сервере и ваших пользователях, указание данных шифрования, предоставление закрытых ключей OpenSSH и т.д., Но сам SSH довольно сложный слишком). С другой стороны, модульная конструкция позволяет просто включать в себя больше SSH-библиотек, упростить реализацию другой обработки команд или даже интерактивных классов и т.д.

Ответ 4

Ниже приведен самый простой способ SSh в java. Загрузите любой из файлов в приведенной ниже ссылке и извлеките, затем добавьте файл jar из извлеченного файла и добавьте в свой путь сборки проект http://www.ganymed.ethz.ch/ssh2/ и используйте метод ниже.

public void SSHClient(String serverIp,String command, String usernameString,String password) throws IOException{
        System.out.println("inside the ssh function");
        try
        {
            Connection conn = new Connection(serverIp);
            conn.connect();
            boolean isAuthenticated = conn.authenticateWithPassword(usernameString, password);
            if (isAuthenticated == false)
                throw new IOException("Authentication failed.");        
            ch.ethz.ssh2.Session sess = conn.openSession();
            sess.execCommand(command);  
            InputStream stdout = new StreamGobbler(sess.getStdout());
            BufferedReader br = new BufferedReader(new InputStreamReader(stdout));
            System.out.println("the output of the command is");
            while (true)
            {
                String line = br.readLine();
                if (line == null)
                    break;
                System.out.println(line);
            }
            System.out.println("ExitCode: " + sess.getExitStatus());
            sess.close();
            conn.close();
        }
        catch (IOException e)
        {
            e.printStackTrace(System.err);

        }
    }