java ssh sftp jsch public-key

¿Cómo resolver Java UnknownHostKey, mientras se usa la biblioteca JSch SFTP?



ssh public-key (3)

Aparte: por "Cygwin" supongo que te refieres a sshd o sftpd, porque Cygwin en sí no hace SSH.

De todos modos, si desea que el cliente Jsch acepte cualquier clave del host, mueva las llamadas .setConfig que establece StrictHostKeyChecking no por lo que es antes de session.connect() . Alternativamente, debe proporcionar acceso a una tienda que contenga la (s) clave (s) correcta (s) para su (s) host (s) como explica @Martin, y siempre debe hacerlo cuando se conecte a algo que no sea "localhost" o posiblemente una máquina que seguramente esté encendida el mismo segmento de red físicamente seguro (como un hub LAN alámbrico dentro de una habitación individual).

Estoy ejecutando un programa java donde transfiero un archivo de una carpeta a otra, usando Java SFTP. El problema que tengo es que recibo el siguiente error en mi Java SFTP (usando JSch):

C: / Oracle / Middleware / Oracle_Home / oracle_common / jdk / bin / javaw.exe -server -classpath C: / JDeveloper / mywork / Java_Hello_World.adf; C: / JDeveloper / mywork / Java_Hello_World / Client / classes; C: / Users / ADMIN / Downloads / jsch-0.1.53.jar -Djavax.net.ssl.trustStore = C: / Users / IBM_AD ~ 1 / AppData / Local / Temp / trustStore5840796204189742395.jks FileTransfer com.jcraft.jsch.JSchException: UnknownHostKey: 127.0.0.1. La huella digital de la clave RSA es a2: 39: 3f: 44: 88: e9: 1f: d7: d1: 71: f4: 85: 98: fb: 90: dc en com.jcraft.jsch.Session.checkHost (Session.java: 797) en com.jcraft.jsch.Session.connect (Session.java:342) en com.jcraft.jsch.Session.connect (Session.java:183) en FileTransfer.main (FileTransfer.java:33) Proceso salido con código de salida 0.

El siguiente es mi código hasta ahora:

FileTransfer fileTransfer = new FileTransfer(); JSch jsch = new JSch(); try { String host = "127.0.0.1"; int port = 22; String user = "user"; Session session = jsch.getSession(user, host, port); session = jsch.getSession("username", "127.0.0.1", 22); session.connect(); // bug here , java.net.ConnectException ChannelSftp sftp = null; sftp = (ChannelSftp)session.openChannel("sftp") ; //channel; //extra config code java.util.Properties config = new java.util.Properties(); config.put("StrictHostKeyChecking", "no"); session.setConfig(config); // end extra config code sftp.rename("C://Users//ADMIN//Desktop//Work//ConnectOne_Bancorp//Java_Work//SFTP_1//house.bmp", "C://Users//ADMIN//Desktop//Work//ConnectOne_Bancorp//Java_Work//SFTP_2//house.bmp"); session.disconnect(); } catch (JSchException e) { e.printStackTrace(); } catch (SftpException e) { e.printStackTrace(); } //end-catch

Mi Cygwin está configurado y verifiqué (con netstat -a -b ) que se está ejecutando.


Está intentando omitir una comprobación de clave de host estableciendo StrictHostKeyChecking en no .

Pero debe hacerlo antes de la comprobación, es decir, antes de la session.connect() .

De todos modos, nunca debe hacer esto, a menos que no le importe la seguridad. La comprobación de la clave del host está ahí para protegerlo de ataques de hombre en el medio .

En su lugar, configure una clave de host esperada para permitir que JSch la verifique.

Por ejemplo:

  • Llame a JSch.setKnownHosts proporcionando una ruta a un archivo similar a .ssh/known_hosts .

    Para generar el archivo similar a .ssh/known_hosts , puede usar un comando ssh-keyscan de OpenSSH. Si se conecta desde un servidor * nix, debe tener el comando disponible, solo ejecute

    ssh-keyscan example.com > known_hosts

    Tendrá un formato como:

    example.com ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA0hVqZOvZ7yWgie9OHdTORJVI5fJJoH1yEGamAd5G3werH0z7e9ybtq1mGUeRkJtea7bzru0ISR0EZ9HIONoGYrDmI7S+BiwpDBUKjva4mAsvzzvsy6Ogy/apkxm6Kbcml8u4wjxaOw3NKzKqeBvR3pc+nQVA+SJUZq8D2XBRd4EDUFXeLzwqwen9G7gSLGB1hJkSuRtGRfOHbLUuCKNR8RV82i3JvlSnAwb3MwN0m3WGdlJA8J+5YAg4e6JgSKrsCObZK7W1R6iuyuH1zA+dtAHyDyYVHB4FnYZPL0hgz2PSb9c+iDEiFcT/lT4/dQ+kRW6DYn66lS8peS8zCJ9CSQ==

    Y haga referencia al archivo known_hosts generado en su código JSch.

    Si está en Windows, puede obtener una compilación de Windows de ssh-keyscan del proyecto Win32-OpenSSH o Git para Windows.

  • Llame a JSch.getHostKeyRepository().add() para proporcionar la clave de host esperada (por ejemplo, codificada, como sus otras credenciales).

    Consulte Crear una instancia de JSch HostKey a partir de una clave pública en formato .pub .


versión jsch: 0.1.55

mi problema resuelto ejecutando:

ssh-keyscan -t rsa <HOST_NAME> >> ~/.ssh/known_hosts ssh-keyscan -t rsa <IP_ADDRESS_OF_HOST_NAME> >> ~/.ssh/known_hosts

** en mi caso, jsch estaba buscando la dirección IP en el archivo conocido_hosts

jsch.setKnownHosts(System.getProperty("user.home")+"/.ssh/known_hosts");