Как я могу выполнить команды Linux на удаленном компьютере, используя Java? - PullRequest
7 голосов
/ 31 октября 2011

У меня есть два защищенных сервера Linux.На одной машине запущено мое Java-приложение.Мне нужно запускать команды Linux на второй машине с первой машины на Java.Как я могу это сделать?

Ответы [ 4 ]

8 голосов
/ 31 октября 2011

Jsch ( здесь ) позволяет вам подключаться к удаленному серверу с использованием SSH и легко выполнять команды оболочки (и многие другие вещи, такие как SCP, SFTP ...).Существует не так много документации, но у вас есть несколько действительно полезных примеров реализации здесь (и даже пример того, что вы хотите сделать здесь ).

Вы также можете комбинировать Jsch с Expect4j и таким образом лучше контролировать команды, которые вы хотите выполнить (хороший пример здесь ).

4 голосов
/ 31 октября 2011

По сути, вам нужно открыть ssh-соединение с другим сервером из вашего Java-приложения.Сайт OpenSSH содержит некоторую полезную информацию о библиотеках, которые обеспечат вам поддержку ssh в Java.

Похоже, что Ganymed SSH-2 для Java - самый хороший извыберите там, но я не использовал ни одного из них, поэтому вам нужно будет посмотреть, что вам нужно.

После подключения по ssh вы сможете запускать команды так же, как если бы вы вошли в систему с помощьюлюбой другой ssh-клиент.

2 голосов
/ 31 октября 2011

Вы можете сделать это несколькими способами; однако почти каждый способ связан с сетевым подключением.

Вы можете написать пару клиент-серверных Java-программ с подключением клиента к серверу и отправкой команды.

Вы могли бы написать свой Java для использования существующего сервера, такого как sshd, telnetd, rsh, ftpd или ранее существовавший другой сервер, который позволяет команды на удаленном конце.

Вы можете использовать архитектуру, которая обрабатывает определенные аспекты создания пары клиент-сервер, такие как RMI, SOAP, CORBA и т. Д.

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

0 голосов
/ 31 октября 2011

Может быть проще проверить Sockets, так как вы можете делать то, что вы пытаетесь сделать, не настраивая внешние библиотеки.

На хост-компьютере вы хотите настроить объект ServerSocket, а с клиентского компьютера вы открываете Socket. У меня нет времени, чтобы напечатать целый пример, но проверьте это для простого способа установить соединение сервер-хост через Интернет в Java.

http://zerioh.tripod.com/ressources/sockets.html

Как только вы это настроите, вы хотите ввести команду оболочки из ServerSocket на компьютере, который должен выполнить команду, и сделать что-то подобное

String command = "get this from the ObjectInputStream attached to your ServerSocket";
Runtime run = Runtime.getRuntime();
Process pr = run.exec(command) ;
pr.waitFor() ;
BufferedReader buffer = new BufferedReader( new InputStreamReader( pr.getInputStream() ) ) ;
String line;
while ( ( line = buffer.readLine() ) != null ) 
{
System.out.println(line);
}

Сложная задача - установить надежное соединение хост-клиент с сокетами, но если вы делаете что-то простое, вам будет хорошо с примером по ссылке выше.

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