2010-06-18 17 views
26

¿Cómo puedo conectarme a un servidor SSH en Java? No necesito/quiero un caparazón. Solo quiero conectarme al servidor SSH y obtener el contenido de, digamos, file.txt. ¿Cómo puedo hacer eso?Conexión SSH con Java

Respuesta

5

Java no soporta de forma nativa que, pero se puede utilizar una biblioteca como JSch hacerlo

1

Debe utilizar una biblioteca de terceros - JSch es uno de ellos. Google con "Java ssh" y obtendrá muchas otras opciones.

1

Puede marcar JSSH, que es una biblioteca Java SSH.

1

http://www.ganymed.ethz.ch/ssh2/ implementa un cliente ssh2 en Java. Lo uso para el reenvío de puertos.

+0

Yo prefiero la gente no utiliza Ganymed puesto que ya no es mantenido. – timonti

+0

@timonti porque usted era el mantenedor? –

+0

"Tenga en cuenta: ETH Zurich ya no mantiene el código. Visite el siguiente sitio web, code.google.com/p/ganymed-ssh-2/, en caso de que necesite actualizaciones" –

32

Uso JSch

import com.jcraft.jsch.ChannelSftp; 
import com.jcraft.jsch.JSch; 
import com.jcraft.jsch.Session; 
import java.io.*; 

/** 
* 
* @author World 
*/ 
public class SSHReadFile 
    { 
    public static void main(String args[]) 
    { 
    String user = "john"; 
    String password = "mypassword"; 
    String host = "192.168.100.23"; 
    int port=22; 

    String remoteFile="/home/john/test.txt"; 

    try 
     { 
     JSch jsch = new JSch(); 
     Session session = jsch.getSession(user, host, port); 
      session.setPassword(password); 
      session.setConfig("StrictHostKeyChecking", "no"); 
     System.out.println("Establishing Connection..."); 
     session.connect(); 
      System.out.println("Connection established."); 
     System.out.println("Crating SFTP Channel."); 
     ChannelSftp sftpChannel = (ChannelSftp) session.openChannel("sftp"); 
     sftpChannel.connect(); 
     System.out.println("SFTP Channel created."); 


     InputStream out= null; 
     out= sftpChannel.get(remoteFile); 
     BufferedReader br = new BufferedReader(new InputStreamReader(out)); 
     String line; 
     while ((line = br.readLine()) != null) 
      System.out.println(line); 
     br.close(); 
     } 
    catch(Exception e){System.err.print(e);} 
    } 
    } 

de salida:

Establishing Connection... 
Connection established. 
Crating SFTP Channel. 
SFTP Channel created. 
This is content from file /home/john/test.txt 
+0

La gran respuesta funcionó para mí, pero solo haga Asegúrese de cerrar todo lo que abra. session.disconnect y sftpChannel.quit. –

+0

Al invocar al constructor se lanza la siguiente excepción: 'GRAVE: JSF1073: se ha interceptado javax.faces.event.AbortProcessingException durante el procesamiento de INVOKE_APPLICATION 5: UIComponent-ClientId = tipoMovimientoGrid: j_idt15, Mensaje = java.lang.ClassCircularityError: com/jcraft/jsch/JSchException java.lang.ClassCircularityError: com/jcraft/jsch/JSchException \t en javax.faces.event.MethodExpressionActionListener.processAction (MethodExpressionActionListener.java:178) ' – Mauro

+0

conseguir el error al intentar conectar con el servidor de windows: com.jcraft.jsch.JSchException: java.net.ConnectException: conexión rechazada: connect –

-1

He utilizado este y trabajé para mí

Channel channel=session.openChannel("exec"); 
String command = "Your Command here"; 
((ChannelExec)channel).setCommand(command); 

InputStream in=channel.getInputStream(); 
((ChannelExec)channel).setErrStream(System.err); 
channel.connect();