2012-06-06 19 views
5

Estoy intentando escribir un programa java que se conectará a través de ssh y hará algunas cosas en un servidor en funcionamiento (redhat linux). Mi caja es Windows. Leí sobre sshj y estoy tratando de hacer que el ejemplo funcione. He trabajado en la mayoría de las dependencias y ahora tengo un error al tratar con las claves públicas/privadas y desafortunadamente tampoco sé mucho (sí, ¡es una tormenta perfecta de novatos!). Aquí está el error:luchando con el ejemplo sshj ('exec'): No se pudo verificar la clave de host `ssh-rsa` con la huella digital

Excepción en hilo net.schmizz.sshj.transport.TransportException "principal": [HOST_KEY_NOT_VERIFIABLE] No se pudo verificar ssh-rsa clave de host con la huella digital para 5f:d6:94:00:9e:ec:7e:34:6d:d0:d3:76:df:5e:dd:3dmyserver en el puerto 22

Aquí está el código:

import net.schmizz.sshj.SSHClient; 
import net.schmizz.sshj.common.IOUtils; 
import net.schmizz.sshj.connection.channel.direct.Session; 
import net.schmizz.sshj.connection.channel.direct.Session.Command; 

import java.io.IOException; 
import java.util.concurrent.TimeUnit; 

/** This examples demonstrates how a remote command can be executed. */ 
public class sshBuddy { 

    public static void main(String... args) 
      throws IOException { 
     final SSHClient ssh = new SSHClient(); 
     ssh.loadKnownHosts(); 
     //ssh.addHostKeyVerifier("5f:d6:94:00:9e:ec:7e:34:6d:d0:d3:76:df:5e:dd:3d"); 

     ssh.connect("myserver"); 
     try { 
      ssh.authPublickey(System.getProperty("myusername")); 
      final Session session = ssh.startSession(); 
      try { 
       final Command cmd = session.exec("ping -c 1 google.com"); 
       System.out.println(IOUtils.readFully(cmd.getInputStream()).toString()); 
       cmd.join(5, TimeUnit.SECONDS); 
       System.out.println("\n** exit status: " + cmd.getExitStatus()); 
      } finally { 
       session.close(); 
      } 
     } finally { 
      ssh.disconnect(); 
     } 
    } 

} 

¡Cualquier ayuda sería apreciada, gracias!

Respuesta

1

probar este

public class sshBuddy { 

    public static void main(String... args) 
      throws IOException { 
     final SSHClient ssh = new SSHClient(); 
     //ssh.loadKnownHosts(); 
     ssh.addHostKeyVerifier("5f:d6:94:00:9e:ec:7e:34:6d:d0:d3:76:df:5e:dd:3d"); 

     ssh.connect("myserver"); 
     try { 
      ssh.authPublickey(System.getProperty("myusername")); 
      final Session session = ssh.startSession(); 
      try { 
       final Command cmd = session.exec("ping -c 1 google.com"); 
       System.out.println(IOUtils.readFully(cmd.getInputStream()).toString()); 
       cmd.join(5, TimeUnit.SECONDS); 
       System.out.println("\n** exit status: " + cmd.getExitStatus()); 
      } finally { 
       session.close(); 
      } 
     } finally { 
      ssh.disconnect(); 
     } 
    } 
} 

elimine el comentario y comentario addHostKeyVerifier loadKnownHosts. Deberia de funcionar.

8

Intenta esto

ssh.addHostKeyVerifier(new PromiscuousVerifier()); 

esto debería funcionar

+2

Esto no es una solución. Básicamente dice que deshabilite la verificación de la clave del host como tal. – Matiss

Cuestiones relacionadas