2010-09-02 12 views
7

Recibo una excepción mientras uso SSHJ."No se pudo cargar la excepción known_hosts" utilizando SSHJ

Aquí es como yo implementé:

public static void main(String[] args) throws IOException { 
    // TODO Auto-generated method stub 
    final SSHClient ssh = new SSHClient(); 
    ssh.loadKnownHosts(); 
    ssh.connect("serverName"); 
    try{ 
     ssh.authPublickey("myUserId"); 
     final Session session = ssh.startSession(); 
     try{ 
      final Command cmd = session.exec("net send myMachineName Hello!!!"); 
      System.out.println(cmd.getOutputAsString()); 
      System.out.println("\n Exit Status: "+cmd.getExitStatus()); 
     }finally{ 
      session.close(); 
     } 
     }finally{ 
      ssh.disconnect(); 
     }  
    } 

} 

Pero tengo la siguiente excepción:

Exception in thread "main" java.io.IOException: Could not load known_hosts 
    at net.schmizz.sshj.SSHClient.loadKnownHosts(SSHClient.java:528) 
    at SSHTEST.main(SSHTEST.java:25) 

¿Qué estoy haciendo mal?

Respuesta

5

Retire el método llamado a loadKnownHosts(), que como se mencionó Erickson cheques en ~/.ssh/known_hosts por defecto (se puede especificar la ubicación como un argumento así, aunque), y sustituirla por:

ssh.addHostKeyVerifier("public-key-fingerprint"); 

para averiguar qué es la huella digital, la forma retorcida sería conectar sin que la declaración - se dará cuenta de la excepción ;-)

2

Parece que está intentando leer un archivo "known_hosts", pero no puede encontrarlo, o posiblemente en un formato no válido.

El archivo de hosts conocidos de SSH registra la clave pública de varios hosts para frustrar algunos ataques de suplantación. Normalmente reside en ~/.ssh/known_hosts. Intente crear un archivo vacío allí y vea si eso satisface la biblioteca.

Es probable que la documentación de la biblioteca aborde los archivos de configuración necesarios.

+0

¿Dónde en el servidor? – user234194

+0

@ user234194: crea el archivo en el cliente. El servidor normalmente no verifica de dónde viene el cliente (que sería un PITA real). –

15

uso del código folowing

final SSHClient ssh = new SSHClient(); 

ssh.addHostKeyVerifier( 
    new HostKeyVerifier() { 
     public boolean verify(String arg0, int arg1, PublicKey arg2) { 
      return true; // don't bother verifying 
     } 
    } 
); 

ssh.connect("LocalHost"); 
+12

sshj ya proporciona un verificador que simplemente acepta lo que se le arroje, intente usar: ssh.addHostKeyVerifier (nuevo PromiscuousVerifier()); Logrará lo mismo sin la necesidad de la clase interna anónima. –

Cuestiones relacionadas