Saltar al contenido

com.jcraft.jsch.JSchException: UnknownHostKey

Solución:

Yo tampoco:

  1. Intentar ssh desde la línea de comando y acepte la clave pública (el host se agregará a ~/.ssh/known_hosts y todo debería funcionar bien desde Jsch) -O-
  2. Configure JSch para que no use “StrictHostKeyChecking” (esto introduce inseguridades y solo debe usarse con fines de prueba), utilizando el siguiente código:

    java.util.Properties config = new java.util.Properties(); 
    config.put("StrictHostKeyChecking", "no");
    session.setConfig(config);
    

Opción n. ° 1 (agregar el host al ~/.ssh/known_hosts archivo) tiene mi preferencia.

Si bien la pregunta ha sido respondida en general, me he dado cuenta de que hay un caso en el que incluso existe hosts_conocidos la entrada no ayuda. Esto sucede cuando un servidor SSH envía la huella digital ECDSA y, como resultado, tendrá una entrada como esta:

|1|+HASH=|HASH= ecdsa-sha2-nistp256 FINGERPRINT=

El problema es que JSch prefiere SHA_RSA y mientras se conecta intentará comparar la huella digital SHA-RSA, lo que dará como resultado un error sobre “host desconocido”.

Para solucionar esto, simplemente ejecute:

$ ssh-keyscan -H -t rsa example.org >> known_hosts

o quejarse con Jcraft por preferir SHA_RSA en lugar de usar el local HostKeyAlgorithms configuración, aunque no parecen estar demasiado ansiosos por corregir sus errores.

Es un riesgo de seguridad evitar la verificación de la clave del host.

JSch usa la interfaz HostKeyRepository y su implementación predeterminada clase KnownHosts para administrar esto. Puede proporcionar una implementación alternativa que permita claves específicas implementando HostKeyRepository. O puede mantener las claves que desea permitir en un archivo en el formato known_hosts y llamar

jsch.setKnownHosts(knownHostsFileName);

O con una cadena de clave pública como se muestra a continuación.

String knownHostPublicKey = "mysite.com ecdsa-sha2-nistp256 AAAAE............/3vplY";
jsch.setKnownHosts(new ByteArrayInputStream(knownHostPublicKey.getBytes()));

consulte Javadoc para obtener más detalles.

Esta sería una solución más segura.

Jsch es de código abierto y puede descargarlo desde aquí. En la carpeta de ejemplos, busque KnownHosts.java para conocer más detalles.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *