jcraft - ¿Cómo ejecuto comandos SSH en un sistema remoto usando Java?
sftp client java (5)
Soy nuevo en este tipo de aplicaciones Java y busco algún código de muestra sobre cómo conectarme a un servidor remoto usando SSH, ejecutar comandos y obtener una salida utilizando Java como lenguaje de programación.
A continuación se muestra la forma más fácil de SSh en Java. Descargue cualquiera de los archivos en el enlace a continuación y extraiga, luego agregue el archivo jar del archivo extraído y agréguelo a su ruta de compilación del proyecto http://www.ganymed.ethz.ch/ssh2/ y use el siguiente método
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);
}
}
Eche un vistazo a 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();
Puede echar un vistazo a este marco basado en Java para la ejecución remota de comandos, incl. a través de SSH: https://github.com/jkovacic/remote-exec Se basa en dos bibliotecas SSH de código abierto, ya sea JSch (para esta implementación incluso se admite una autenticación ECDSA) o Ganymed (una de estas dos bibliotecas será suficiente). A primera vista, puede parecer un poco complejo, tendrás que preparar muchas clases relacionadas con SSH (proporcionando detalles del servidor y del servidor, especificando detalles de encriptación, proporcionando claves privadas compatibles con OpenSSH, etc., pero el SSH en sí es bastante complejo) también). Por otro lado, el diseño modular permite la inclusión simple de más bibliotecas SSH, fácil implementación del procesamiento de salida de otros comandos o incluso clases interactivas, etc.
Utilicé ganimedes hace unos años ... http://www.cleondris.ch/opensource/ssh2/