Tengo dos servidores Linux seguros. En una máquina, mi aplicación Java se está ejecutando. Necesito ejecutar comandos de Linux en la segunda máquina desde la primera máquina en Java. ¿Cómo podría hacer esto?¿Cómo puedo ejecutar comandos de Linux en una máquina remota usando Java?
Respuesta
Esencialmente, debe abrir una conexión ssh al otro servidor desde dentro de su aplicación Java. El sitio OpenSSH contiene información útil sobre bibliotecas que le brindarán soporte de ssh en Java.
Parece que Ganymed SSH-2 for Java es el más bonito de la selección, pero no he usado ninguno de ellos, así que tendrá que mirar lo que necesita.
Una vez que tenga una conexión ssh, podrá ejecutar comandos como si hubiera iniciado sesión utilizando cualquier otro cliente ssh.
su enlace de OpenSSH no funciona –
Puede ser más fácil consultar Sockets, ya que puede hacer lo que intenta hacer sin tener que configurar ninguna biblioteca externa.
En el equipo host, desea configurar un objeto ServerSocket, y desde el equipo cliente abre un Socket. No tengo tiempo para escribir todo un ejemplo, pero mira esto para una forma simple de configurar una conexión servidor-host a través de Internet en Java.
http://zerioh.tripod.com/ressources/sockets.html
Una vez que usted consigue que creó, que desea introducir el comando shell del ServerSocket en el equipo que debe ejecutar el comando, y hacer algo alrededor de las líneas de
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);
}
El La parte difícil es establecer una conexión de host-cliente realiable con los Sockets, pero si estás haciendo algo simple, deberías estar bien con el ejemplo del enlace de arriba.
¿Realmente desea reinventar la rueda y rehacer todo para asegurar la conexión cuando puede usar ssh? – lc2817
Leí mal la pregunta como una solicitud de implementación de Java. Gracias por mencionarlo. –
Puede hacerlo de varias maneras; sin embargo, casi todas las formas implican una conexión de red.
Puede escribir un par de programas cliente-servidor de Java, con la conexión del cliente a un servidor y enviando el comando.
Puede escribir su Java para usar un servidor existente, como sshd, telnetd, rsh, ftpd, o un otro servidor preexistente que permita comandos en el extremo remoto.
Se podría aprovechar una arquitectura que maneja ciertos aspectos del establecimiento de un par cliente-servidor, como RMI, SOAP, CORBA, etc.
Al final Java soporta un montón de opciones de red, por lo que tiene más formas de haciendo esto de lo que piensas Solo asegúrate de no hacerlo en un navegador web, ya que esas JVM se lanzaron en un espacio aislado, y no puedes salir del arenero sin ayuda.
Jsch (here) le permite conectarse a un servidor remoto utilizando SSH y ejecuta comandos de shell fácilmente (y muchas otras cosas como SCP, SFTP ...). No hay mucha documentación, pero tiene algunos ejemplos de implementación realmente útiles, here (e incluso un ejemplo de lo que quiere hacer here).
También puede combinar Jsch con Expect4j y así tener un mejor control de los comandos que desea ejecutar (buen ejemplo here).
+1 para una respuesta perfecta .... Muchas gracias –
- 1. Linux ejecutar comandos de forma remota
- 2. Eclipse - Ejecutar proyecto en una máquina remota
- 3. Múltiples comandos en la máquina remota usando script de shell
- 4. ¿Cómo puedo ejecutar una aplicación OpenGL instalada en una máquina Linux desde mi máquina Windows?
- 5. Cómo ejecutar el proceso en una máquina remota, en C#
- 6. Cómo ejecutar comandos del sistema (linux/bsd) usando Java
- 7. ¿Cómo puedo ejecutar comandos de Linux en un dispositivo Android?
- 8. ¿Cómo puedo ejecutar comandos externos en C++/Linux?
- 9. ¿Cómo copio un directorio a una máquina remota usando Fabric?
- 10. ¿Maneras alternativas de emitir comandos múltiples en una máquina remota usando SSH?
- 11. ¿Cómo puedo ejecutar de forma remota un script en Windows?
- 12. ¿Cómo ejecutar un script de powershell disponible en una máquina remota?
- 13. Comandos de Linux de Java
- 14. Ejecutar un comando del sistema linux como superusuario, usando una secuencia de comandos python
- 15. ¿Cómo ejecutar pruebas automatizadas de GUI en una máquina virtual ESXi sin cabeza remota?
- 16. Depuración remota de una aplicación Java
- 17. Cómo ejecución remota de una secuencia de comandos remota elevada en PowerShell
- 18. Ejecutar comandos de Linux desde Qt4
- 19. ¿Cómo puedo ejecutar una secuencia de comandos de Perl como un daemon del sistema en Linux?
- 20. Obtener el volcado del heap desde una aplicación remota en Java usando JVisualVM
- 21. ¿Cómo obtengo mis especificaciones CUDA en una máquina Linux?
- 22. Configuración de Remote Webdriver para ejecutar pruebas en una computadora remota usando Java
- 23. ¿Cómo puedo ejecutar una lista de comandos en paralelo?
- 24. ¿Hay alguna forma de ejecutar un script de python en una máquina remota sin enviarlo?
- 25. ¿Cómo puedo empaquetar y ejecutar una aplicación de línea de comandos simple con dependencias usando maven?
- 26. Acceso a TEAMCITY desde una máquina remota
- 27. cmake "make install" a la máquina remota?
- 28. ¿Cómo puedo usar el escritorio remoto para una máquina con Windows desde una máquina con Linux?
- 29. Cómo utilizar el volcado de MySQL desde una máquina remota
- 30. Copie un archivo no exe en una máquina remota
Sockets es lo primero que viene a la mente. http://download.oracle.com/javase/tutorial/networking/sockets/ – Adam