Volver a actualizaciones
Nuevo releaseAug 26, 2026

jsch jsch-2.28.7

fork de la popular biblioteca jsch

Compartir

Fork de JSch-0.1.55

Ver el README original

GitHub release Maven Central Java CI with Maven

¿Por qué deberías usar esta librería?

Como expliqué en un artículo de blog, los puntos principales son:

  • OpenSSH ha deshabilitado ssh-rsa en la versión 8.8 por defecto y necesitas una librería que admita rsa-sha2-256 y rsa-sha2-512.
  • Reemplazo directo: solo cambia las coordenadas de dependencia y ya estás listo.
  • No hay mantenimiento activo de JSch en SourceForge.
  • Se mantiene al día con las características de OpenJDK, por lo que no se necesitan dependencias adicionales.

¿Hay documentación?

No mucha. Revisa el código de ejemplo en la carpeta examples. Y hay algunas páginas wiki, es decir, Jsch-Configuration y Jsch-Logging.

Versionado

Hasta 0.2.26, el versionado seguía el esquema original de jsch; a partir de 2.27.0, cambiamos al versionado semántico, lo que expresa que la API de la librería es estable y se usa en producción.

Cómo usar esta librería como reemplazo de com.jcraft:jsch

Asegúrate de tener solo una dependencia de jsch en tu classpath. Por ejemplo, puedes comprobar la salida de mvn dependency:tree.

reemplazando una dependencia directa de Maven

reemplaza

<dependency>
    <groupId>com.jcraft</groupId>
    <artifactId>jsch</artifactId>
    <version>0.1.55</version>
</dependency>

con

<dependency>
  <groupId>com.github.mwiede</groupId>
  <artifactId>jsch</artifactId>
  <version>2.28.0</version>
</dependency>

reemplazando jsch como dependencia transitiva de Maven

Cuando tienes un artefacto foo:bar, que contiene com.jcraft:jsch como dependencia transitiva, necesitas añadir com.github.mwiede:jsch como otra dependencia y excluir la de jcraft:

<dependency>
  <groupId>com.github.mwiede</groupId>
  <artifactId>jsch</artifactId>
  <version>2.28.0</version>
</dependency>
<dependency>
  <groupId>foo</groupId>
  <artifactId>bar</artifactId>
  <exclusions>
        <exclusion>  
          <groupId>com.jcraft</groupId>
          <artifactId>jsch</artifactId>
        </exclusion>
      </exclusions> 
</dependency>

Adición: También puedes excluir cualquiera de com.jcraft:jsch.agentproxy.jsch, com.jcraft:jsch.agentproxy.core o com.jcraft:jsch.agentproxy.pageant, porque estos módulos se integraron en este fork (consulta las notas de la versión 0.1.66).

Preguntas frecuentes

¿Cuál es la versión mínima de Java requerida?

  • Java 8. Para más limitaciones, consulta la siguiente respuesta.

¿Se admiten ssh-ed25519, ssh-ed448, curve25519-sha256, curve448-sha512 y chacha20-poly1305@openssh.com?

  • Esta librería es un Multi-Release-jar, lo que significa que solo puedes usar ciertas funciones cuando se utiliza una versión más reciente de Java.
    • Para usar ssh-ed25519 y ssh-ed448, debes utilizar al menos Java 15 o añadir Bouncy Castle (bcprov-jdk18on) al classpath.
    • Para usar curve25519-sha256 y curve448-sha512, debes utilizar al menos Java 11 o añadir Bouncy Castle (bcprov-jdk18on) al classpath.
    • Para usar chacha20-poly1305@openssh.com, debes añadir Bouncy Castle (bcprov-jdk18on) al classpath.
  • A partir de la versión 0.1.66, estos algoritmos ahora se pueden usar con versiones anteriores de Java si se añade Bouncy Castle (bcprov-jdk18on) al classpath.
    • A partir de la versión 0.1.72, chacha20-poly1305@openssh.com solo se puede usar si se añade Bouncy Castle (bcprov-jdk18on) al classpath.

¿Por qué las claves de tipo ssh-rsa no funcionan con este fork de JSch y mi servidor?

  • A partir de la versión 0.2.0, el algoritmo de firma RSA/SHA1 está deshabilitado por defecto.
    • SHA1 ya no se considera seguro por parte de la comunidad criptográfica general, y este fork de JSch se esfuerza por mantener opciones seguras para los algoritmos predeterminados que utilizará.
    • Esto también sigue el ejemplo del proyecto OpenSSH, que deshabilitó las firmas RSA/SHA1 por defecto a partir de la versión 8.8 de OpenSSH.
  • Las claves de tipo ssh-rsa siguen funcionando por defecto con los algoritmos de firma RSA/SHA256 (rsa-sha2-256) y RSA/SHA512 (rsa-sha2-512) definidos por RFC 8332.
  • Si tu servidor solo admite firmas RSA/SHA1 y necesitas usarlas en tu aplicación, tendrás que volver a habilitarlas manualmente mediante uno de los siguientes medios (consulta también la página wiki Jsch-Configuration):
    • Globalmente, añadiendo "ssh-rsa" a las propiedades jsch.server_host_key + jsch.client_pubkey.
    • Globalmente, ejecutando algo similar a JSch.setConfig("server_host_key", JSch.getConfig("server_host_key") + ",ssh-rsa") + JSch.setConfig("PubkeyAcceptedAlgorithms", JSch.getConfig("PubkeyAcceptedAlgorithms") + ",ssh-rsa").
    • Por sesión, ejecutando algo similar a session.setConfig("server_host_key", session.getConfig("server_host_key") + ",ssh-rsa") + session.setConfig("PubkeyAcceptedAlgorithms", session.getConfig("PubkeyAcceptedAlgorithms") + ",ssh-rsa").
    • Añadiendo "ssh-rsa" a tu archivo de configuración de tipo OpenSSH con las palabras clave "HostKeyAlgorithms" + "PubkeyAcceptedAlgorithms" y luego utilizando la clase OpenSSHConfig.

¿Es este fork 100% compatible con el JSch original? ¡Porque la conexión a mi servidor ya no funciona!

  • Para la compatibilidad con OpenSSH y una mayor seguridad, se cambió el orden de los algoritmos criptográficos. Si aún quieres usar algoritmos más antiguos u obsoletos, necesitas cambiar la configuración. Ejemplos: ver #37, #40
  • Para que sea más fácil ajustar los algoritmos criptográficos, a partir de 0.1.65 se pueden establecer las siguientes propiedades del sistema al iniciar tu aplicación:
    • jsch.kex
      • análogo a JSch.setConfig("kex", "...")
    • jsch.server_host_key
      • análogo a JSch.setConfig("server_host_key", "...")
    • jsch.prefer_known_host_key_types
      • análogo a JSch.setConfig("prefer_known_host_key_types", "...")
    • jsch.enable_server_sig_algs
      • análogo a JSch.setConfig("enable_server_sig_algs", "...")
    • jsch.cipher
      • análogo a JSch.setConfig("cipher.s2c", "...") + JSch.setConfig("cipher.c2s", "...")
    • jsch.mac
      • análogo a JSch.setConfig("mac.s2c", "...") + JSch.setConfig("mac.c2s", "...")
    • jsch.compression
      • análogo a JSch.setConfig("compression.s2c", "...") + JSch.setConfig("compression.c2s", "...")
    • jsch.lang
      • análogo a JSch.setConfig("lang.s2c", "...") + JSch.setConfig("lang.c2s", "...")
    • jsch.dhgex_min
      • análogo a JSch.setConfig("dhgex_min", "...")
    • jsch.dhgex_max
      • análogo a JSch.setConfig("dhgex_max", "...")
    • jsch.dhgex_preferred
      • análogo a JSch.setConfig("dhgex_preferred", "...")
    • jsch.compression_level
      • análogo a JSch.setConfig("compression_level", "...")
    • jsch.preferred_authentications
      • análogo a JSch.setConfig("PreferredAuthentications", "...")
    • jsch.client_pubkey
      • análogo a JSch.setConfig("PubkeyAcceptedAlgorithms", "...")
    • jsch.check_ciphers
      • análogo a JSch.setConfig("CheckCiphers", "...")
    • jsch.check_macs
      • análogo a JSch.setConfig("CheckMacs", "...")
    • jsch.check_kexes
      • análogo a JSch.setConfig("CheckKexes", "...")
    • jsch.check_signatures
      • análogo a JSch.setConfig("CheckSignatures", "...")
    • jsch.fingerprint_hash
      • análogo a JSch.setConfig("FingerprintHash", "...")
    • jsch.max_auth_tries
      • análogo a JSch.setConfig("MaxAuthTries", "...")

Otros proyectos que usan JSch

  • Jsync https://github.com/fizzed/jsync - Proporciona una herramienta de sincronización de archivos y directorios simple, eficiente, confiable y en Java puro, similar a rsync, que puede usarse programáticamente.
  • Blaze https://github.com/fizzed/blaze - Una forma de ejecutar archivos Java como scripts, con potentes funciones SSH, SFTP y similares a rsync integradas.

Cambios desde el fork:

Consulta ChangeLog.md

Categorías