Как запустить команды SSH в удаленной системе с использованием Java? - PullRequest
27 голосов
/ 25 марта 2010

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

Ответы [ 5 ]

15 голосов
/ 25 марта 2010

Посмотрите на 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();
12 голосов
/ 22 сентября 2011

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

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

4 голосов
/ 24 мая 2016

Ниже приведен самый простой способ 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);

        }
    }
3 голосов
/ 22 мая 2012

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

1 голос
/ 25 марта 2010

Я использовал для этого ганимед несколько лет назад ... http://www.cleondris.ch/opensource/ssh2/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...