Avertissement | Les versions SSHJ jusqu'à 0.37.0 incluses sont vulnérables à CVE-2023-48795 - Terrapin. Veuillez passer à la version 0.38.0 ou supérieure. |
Pour commencer, jetez un œil à l’un des exemples. J'espère que vous trouverez l'API agréable à utiliser :)
Pour obtenir SSHJ, vous avez deux options :
Ajoutez une dépendance à SSHJ à votre projet.
Construisez vous-même SSHJ.
Et si vous le souhaitez, vous pouvez également exécuter les exemples SSHJ.
Les versions binaires de SSHJ ne sont pas fournies ici, mais vous pouvez les télécharger directement depuis le référentiel Maven Central si vous le souhaitez.
Si vous construisez votre projet à l'aide de Maven, vous pouvez ajouter la dépendance suivante au pom.xml
:
< dependency >
< groupId >com.hierynomus</ groupId >
< artifactId >sshj</ artifactId >
< version >0.38.0</ version >
</ dependency >
Si votre projet est construit à l'aide d'un autre outil de build qui utilise le référentiel Maven Central, traduisez cette dépendance dans le format utilisé par votre outil de build.
Clonez le référentiel SSHJ.
Assurez-vous que Java6 est installé avec les extensions de cryptographie Java (JCE) à force illimitée.
Exécutez la commande ./gradlew clean build
.
Dans le répertoire examples
, il existe un projet Maven distinct qui montre comment la bibliothèque peut être utilisée dans certains exemples de cas. Si vous souhaitez les exécuter, suivez ces directives :
Installez Maven 2.2.1 ou version ultérieure.
Clonez le référentiel SSHJ.
Allez dans le répertoire examples
et exécutez la commande mvn eclipse:eclipse
.
Importez le projet examples
dans Eclipse.
Modifiez les informations de connexion dans les exemples de classes (adresse, nom d'utilisateur et mot de passe) et exécutez-les !
lecture des fichiers known_hosts pour la vérification de la clé d'hôte
Authentification interactive par clé publique, mot de passe et clavier
canaux de commande, de sous-système et de shell
redirection de port local et distant
scp + implémentation complète de sftp version 0-3
Des implémentations/adaptateurs pour les algorithmes suivants sont inclus :
aes{128,192,256}-{cbc,ctr}
, aes{128,256}[email protected]
, blowfish-{cbc,ctr}
, [email protected]
, 3des-{cbc,ctr}
, twofish{128,192,256}-{cbc,ctr}
, twofish-cbc
, serpent{128,192,256}-{cbc,ctr}
, idea-{cbc,ctr}
, cast128-{cbc,ctr}
, arcfour
, arcfour{128,256}
SSHJ prend également en charge les chiffrements étendus (non officiels) suivants : camellia{128,192,256}-{cbc,ctr}
, camellia{128,192,256}-{cbc,ctr}@openssh.org
diffie-hellman-group1-sha1
, diffie-hellman-group14-sha1
, diffie-hellman-group14-sha256
, diffie-hellman-group15-sha512
, diffie-hellman-group16-sha512
, diffie-hellman-group17-sha512
, diffie-hellman-group18-sha512
diffie-hellman-group-exchange-sha1
, diffie-hellman-group-exchange-sha256
, ecdh-sha2-nistp256
, ecdh-sha2-nistp384
, ecdh-sha2-nistp521
, [email protected]
SSHJ prend également en charge les algorithmes d'échange de clés étendus (non officiels) suivants : `[email protected]`, `diffie-hellman-group15-sha256`, `[email protected]`, `[email protected] ', `diffie-hellman-group16-sha256`, `[email protected]`, `[email protected]`, `[email protected] `
ssh-rsa
, ssh-dss
, ecdsa-sha2-nistp256
, ecdsa-sha2-nistp384
, ecdsa-sha2-nistp521
, ssh-ed25519
, ssh-rsa2-256
, ssh-rsa2-512
hmac-md5
, hmac-md5-96
, hmac-sha1
, hmac-sha1-96
, hmac-sha2-256
, hmac-sha2-512
, hmac-ripemd160
, [email protected]
[email protected]
, [email protected]
, [email protected]
, [email protected]
, [email protected]
, [email protected]
, [email protected]
zlib
et [email protected]
(zlib retardé)
pkcs5
, pkcs8
, openssh-key-v1
, [email protected]
, [email protected]
Si vous avez besoin de quelque chose qui n'est pas inclus, cela ne devrait pas être trop difficile à ajouter (apportez-le !)
Comparaison des implémentations SSH
Java 8 ou supérieur
SLF4J 2.0.0
Château gonflable
Suivi des problèmes : https://github.com/hierynomus/sshj/issues
Partez!
CVE-2023-48795 atténué - Terrapin
Fusion #917 : implémenter l'extension d'échange de clés stricte OpenSSH
Fusionné #903 : Correction de l'écriture de la chaîne de clé des hôtes connus
Fusionné #913 : Empêcher la croissance sans limites des tampons de redirection de port distant
Tests déplacés vers JUnit5
Fusionné #827 : Retour à l'extension [email protected] si disponible
Fusionné #904 : Ajouter la prise en charge de ChaCha20-Poly1305 pour les clés OpenSSH
Fusionné #899 : Ajout de la prise en charge des clés privées AES-GCM OpenSSH
Fusionné #901 : Correction d'un bug de compression ZLib
Fusionné #898 : Amélioration de la gestion des fichiers malformés pour les clés privées OpenSSH
Réécriture des tests d'intégration sur JUnit5
Fusionné #851 : Correction d'une condition de concurrence critique dans l'échange de clés provoquant un SSH_MSG_UNIMPLEMENTED intermittent
Fusionné #861 : Ajouter DefaultSecurityProviderConfig avec BouncyCastle désactivé
Fusion #881 : réécriture des classes de test sur le moteur JUnit Jupiter
Fusionné #880 : Suppression des utilitaires de socket de backport Java 7
Fusionné #879 : remplacement de Base64 personnalisé par java.util.Base64
Fusionné #852 : Suppression des méthodes de hachage de mot de passe bcrypt inutilisées
Fusionné #874 : version minimale de Java 8 + mises à niveau des dépendances
Fusionné #876 : modifiez newStatefulSFTPClient
pour renvoyer StatefulSFTPClient
Fusionné #860 : mise à niveau vers Gradle 7.6.1
Fusion #838 : remplacement de la classe Curve25519 par l'accord de clé X25519
Fusionné #772 : Supprimer la dépendance sur jzlib
Fusionné #835 : message TimeoutException amélioré
Fusionné #815 : Prise en charge d'authPassword sur FreeBSD
Fusionné #813 : empêchez CHANNEL_CLOSE
entre isOpen et l'appel d'écriture.
Fusionné #811 : ajoutez Transport.isKeyExchangeREquired
pour éviter les KEXINIT inutiles
Fusionné #743 : Utiliser les informations d'identification client par défaut pour AuthGssApiWithMic
Fusionné #801 : Restaurer l'état d'interruption du thread après avoir détecté InterruptedException
Fusionné #793 : Fusionner les classes PKCS5 et PKCS8
Dépendances mises à niveau SLF4J (1.7.36) et Logback (1.2.11)
Fusionné #791 : Mettre à jour les exemples KeepAlive
Fusionné #775 : Ajouter la prise en charge de la reprise SFTP
Dépendances améliorées BouncyCastle (1.70)
Fusionné #687 : Fermez correctement la connexion lorsque la télécommande ferme la connexion.
Fusionné #741 : ajout de la prise en charge des conteneurs de test dans la configuration des tests pour tester davantage de scénarios
Fusionné #733 : envoyer une proposition de clé correcte si le client connaît la clé d'autorité de certification
Fusionné #746 : Correction d'un bug lors de la lecture du fichier de clé privée Putty avec phrase secrète
Fusionné #742 : utilisez Config.keyAlgorithms pour déterminer la prise en charge de rsa-sha2
Fusionné #754 : Utiliser la version du protocole SFTP pour définir les indicateurs de renommage FXP de manière conditionnelle
Fusionné #752 : démarrer et terminer correctement le fil KeepAlive
Fusionné #753 : Fournissez de meilleurs noms de fil de discussion
Fusionné #724 : Ajouter un paramètre pour limiter la longueur de lecture anticipée
Fusionné #763 : Essayez tous les algorithmes de clé publique pour un type de clé spécifique
Fusionné #756 : Supprimer les méthodes de connexion proxy obsolètes
Fusionné #770 : Ajout de la prise en charge des clés ed25519
aes-128-cbc
Fusionné #773 : Correction de NPE lors de la lecture d'OpenSSHKeyV1KeyFile vide
Fusionné #777 : Ne demandez pas trop de paquets en lecture anticipée
Envoyer EOF à la fermeture du canal (Corrections #143, #496, #553, #554)
Fusionné #726 : Analyser les clés OpenSSH v1 avec les informations CRT complètes présentes
Fusionné #721 : Préférer l'algorithme de clé d'hôte connu pour la vérification de la clé d'hôte
Fusionné #716, #729 et #730 : ajout d'une prise en charge complète des fichiers de clés PuTTY v3.
Fusionné #708 et #71 : ajout de la prise en charge des clés privées PKCS#8
Fusionné #703 : prise en charge des clés de certificat d'hôte
Dépendances mises à niveau BouncyCastle (1.69), SLF4j (1.7.32), Logback (1.2.6), asn-one (0.6.0)
Fusionné #702 : prise en charge de l'authentification par clé publique à l'aide de certificats
Fusionné #691 : correctif pour l'écriture d'entiers négatifs non signés dans Buffer
Fusionné #682 : Prise en charge du chiffrement [email protected]
Fusionné #680 : mtimes de conservation configurables pour les transferts SCP
Dépendances Bump (asn-one 0.5.0, BouncyCastle 1.68, slf4j-api 1.7.30)
Fusionné #660 : Prise en charge des clés ED25519 et ECDSA au format PuTTY
Fusionné #655 : Bump BouncyCastle en raison de CVE
Fusionné #653 : Rendre la classe Parameters utilisable comme clé HashMap
Fusionné #647 : Réduire le niveau de journalisation pour l'analyseur d'identification
Fusionné #630 : ajout de la prise en charge des chiffrements [email protected]
et [email protected]
Fusionné #636 : compatibilité Android améliorée
Fusionné #627 : Empêcher les fuites de clés
CHANGEMENT RUPTURE : suppression de setSignatureFactories
et getSignatureFactories
de la configuration et remplacement de getKeyAlgorithms
et setKeyAlgorithms
Corrigé #588 : Ajout de la prise en charge des signatures ssh-rsa2-256
et ssh-rsa2-512
Fusionné #579 : Correction de NPE dans OpenSSHKnownHosts
Fusionné #587 : Ajouter une nouvelle tentative de recherche de mot de passe pour OpenSSHKeyV1KeyFile
Fusionné #586 : Rendre KeyType compatible avec Android Store
Fusionné #593 : remplacez UserAuth.getAllowedMethods()
par le type de retour Collection
Fusionné #595 : Autoriser la lecture de clés de longueur arbitraire
Fusionné #591 : Autoriser l'interrogation des extensions SFTP
Fusionné #603 : Ajouter une méthode pour créer un client SFTP avec état
Fusionné #605 : utilisez les threads du démon pour éviter de bloquer l'arrêt de la JVM
Fusionné #606 : utilisez toujours le JCERandom RNG par défaut
Fusionné #609 : Effacer la phrase secrète après utilisation pour éviter les problèmes de sécurité
Fusionné #618 : Correction du port local de DirectConnection à utiliser avec OpenSSH > 8.0
Fusionné #619 : BouncyCastle mis à niveau vers 1.66
Fusionné #622 : Envoyer 'ext-info-c' avec les algorithmes KEX
Fusionné #623 : Correction du codage de transport des signatures nistp521
Fusionné #607 : Correction des clés publiques correspondantes aux algorithmes clés
Fusionné #602 : Correction de la détermination de la clé de certificat RSA
Corrigé #415 : Correction du préfixe '/' erroné au chemin dans SFTPClient.mkdirs
Ajout de la prise en charge des algorithmes MAC ETM (Encrypt-then-Mac).
Corrigé #454 : Ajout d'une vérification de capacité manquante pour Buffer.putUint64
Corrigé #466 : Ajout d'un délai d'expiration de verrouillage pour une action à distance afin d'éviter le blocage
Corrigé #470 : EdDSA est devenu la (première) fabrique de signatures par défaut
Corrigé #467 : Ajout de AES256-CBC comme mode de chiffrement dans la prise en charge openssh-key-v1
Corrigé #464 : Activé [email protected] dans DefaultConfig
Corrigé #472 : Gérer les requêtes globales initiées par le serveur
Corrigé #485 : Ajout de la prise en charge de tous les types de clés dans les fichiers de clés openssh-key-v1.
Corrigé #413 : Utiliser UTF-8 pour PrivateKeyFileResource
Corrigé #427 : Prise en charge des fichiers cryptés ed25519 openssh-key-v1
BouncyCastle amélioré à 1.60
Ajout de la prise en charge de [email protected] MAC
Ajout de la prise en charge de hmac-ripemd160
Corrigé #382 : Correction de l'évasion dans WildcardHostmatcher
Ajout d'une suite de tests d'intégration utilisant Docker avec OpenSSH
Corrigé #187 : Correction d'un bug de longueur dans Buffer.putString
Corrigé #405 : Continuez la vérification de l'hôte si la première clé d'hôte ne correspond pas.
Fusionné #372 : Mise à niveau vers 'net.i2p.crypto:eddsa:0.2.0'
Corrigé #355 et #354 : décoder correctement les octets de signature
Corrigé #365 : Ajout de la prise en charge des empreintes digitales OpenSSH de nouveau style des clés de serveur
Corrigé #356 : Correction de la détection du type de clé pour les clés publiques ECDSA
Rendu compatible SSHJ Java9
Corrigé #341 : Correction du chemin parcouru pendant la copie récursive
Fusionné #338 : Ajout de ConsolePasswordFinder pour lire le mot de passe depuis stdin
Fusionné #336 : Ajout de la prise en charge des signatures ecdsa-sha2-nistp384 et ecdsa-sha2-nistp521
Corrigé #331 : Ajout de la prise en charge des caractères génériques dans le fichier known_hosts
Fusionné #322 : Correction de la régression de 40f956b (paramètre de longueur invalide sur le flux de sortie)
Fusionné #319 : Ajout de la prise en charge des fichiers de clés de certificat [email protected]
et [email protected]
Gradle mis à niveau vers 3.4.1
Fusionné #305 : Ajout de la prise en charge de l'encodage de chaîne personnalisé
Corrigé #312 : BouncyCastle mis à niveau vers 1.56
Fusionné #294 : Référence ED25519 par constante au lieu du nom
Fusion des numéros 293, 295 et 301 : correction du packaging OSGi
Ajout de nouveaux groupes Diffie Hellman 15-18 pour des algorithmes KeyExchange plus puissants
Activation des fichiers de clé PKCS5 dans DefaultConfig
Fusionné #291 : Correction du chargement de sshj.properties et des messages d'exception enchaînés
Fusionné #284 : intercepter correctement l'interruption dans le thread keepalive
Corrigé #292 : transmettre la RandomFactory configurée à Diffie Hellman KEX
Corrigé #256 : SSHJ se construit désormais si aucun référentiel git n'est présent
LocalPortForwarder interrompt désormais correctement son propre thread lors de close()
Corrigé #276 : Ajout de la prise en charge de ed-25519 et du nouveau format de clé OpenSSH
Corrigé #280 : Lire la version à partir d'un fichier sshj.properties généré pour afficher correctement la version pendant la négociation
Compatibilité Android fixe
Mise à niveau vers Gradle 3.0
Fusionné #271 : Charger les hôtes_connus sans nécessiter BouncyCastle
Fusionné #269 : retour du support Java6 à la demande générale
Fusionné #267 : Ajout de la prise en charge de la journalisation par connexion (Correctifs #264)
Fusion #262, #265 et #266 : ajout de la prise en charge des fichiers de clés PKCS5
Correction de la chaîne d'attributs de fichier sftp (correctifs n° 258)
Corrigé #255 : Ne dépend plus des classes « marquées en privé » dans le package net.i2p.crypto.eddsa.math
, corrige les dépendances OSGI
Traiter avec indulgence la ligne d'identification du serveur SSH se terminant par 'n' au lieu de 'rn'.
Analyse améliorée de l'identification du serveur SSH. Les lignes d'en-tête trop longues ne rompent plus le protocole.
Introduction d'un changement radical dans le comportement de copie SFTP : auparavant, une opération de copie SFTP se comportait différemment si la source et la cible étaient des dossiers portant des noms différents. Dans ce cas, au lieu de copier le contenu de la source dans le répertoire cible, le répertoire lui-même a été copié en tant que sous-répertoire du répertoire cible. Ce comportement a été supprimé au profit du comportement par défaut qui consiste à copier le contenu de la source dans la cible. Aligner le comportement sur le fonctionnement de SCP.
Corrigé #252 (via : #253) : Les sous-répertoires du même nom ne sont plus fusionnés par accident
Corrigé #239 : Les transferts de port distant ne fonctionnaient pas si vous utilisiez la chaîne vide comme adresse ou une adresse fourre-tout.
Corrigé #242 : Ajout des en-têtes OSGI au manifeste du pot des sources
Corrigé #236 : La redirection de port distant avec allocation de port dynamique échoue avec BufferUnderflowException
Distribution Gradle mise à niveau vers 2.12
Fermé #234 : suppression de la prise en charge de Java6 (la version 0.15.0 était déjà incompatible avec Java6 en raison de la dépendance de Java7)
Corrigé #118 : Ajout d'un commutateur de configuration pour attendre un identifiant de serveur avant d'envoyer l'identifiant de client.
Corrigé #114 : Ajout de javadoc selon lequel vous devez toujours appeler close() sur une commande avant d'inspecter les codes de sortie.
Corrigé #237 : Correction d'une condition de concurrence critique si une demande globale [email protected]
est reçue directement après une authentification réussie.
Corrigé #220 : Ajout de la prise en charge des clés d'hôte ssh-ed25519
Corrigé #225 : Correction d'un bug dans le calcul de l'empreinte digitale ECDSA qui produisait parfois une empreinte digitale incorrecte
Ajout des chiffrements de flux arcfour
de RFC4253 et RFC4345
Ajout de tous les chiffrements par blocs de RFC4344 et RFC4253
Corrigé #171 : Ajout de la prise en charge de l'algorithme d'échange de clés [email protected]
Ajout de la prise en charge des algorithmes d'échange de clés ecdh-sha2-nistp256
, ecdh-sha2-nistp384
et ecdh-sha2-nistp521
Corrigé #167 : Ajout de la prise en charge des méthodes d'échange de clés diffie-hellman-group-exchange-sha1
et diffie-hellman-group-exchange-sha256
Corrigé #212 : Configurez l'échappement du chemin pour permettre à l'extension du shell de fonctionner correctement
Fusionné #210 : RemoteFileInputStream.skip renvoie une valeur incorrecte (Corrections #209)
Fusionné #208 : Ajout de la prise en charge de la limitation de la bande passante SCP
Fusionné #211 : Rendu la détection du format de fichier clé plus robuste
Fusionné #199 : correctif pour IndexOutOfBoundsException dans ReadAheadRemoteFileInputStream, correctifs #183
Fusionné #195 : Nouvelle authentification prise en charge : gssapi-with-mic
Fusionné #201 : Nouvelle option pour vérifier les algorithmes d'échange de clés négociés
Fusionné #196 : Correction de la recherche du nom d'hôte complet dans le fichier d'hôtes connus
Ajout de la prise en charge des proxys HTTP lors de l'exécution de JDK6 ou JDK7, correctifs : #170
Fusionné #186 : Correctif pour détecter la fin du flux
Compilation vers JDK6, correctifs #179 et #185
Fermez correctement le socket et le canal lorsque LocalPortForwarder ne parvient pas à ouvrir et démarrer le canal (correctifs n° 175 et n° 176)
Fusionné #181 : Longueur du paquet d'écriture invalide lors de la lecture avec décalage (Corrections #180)
Le nouveau maven coordonne com.hierynomus:sshj:0.11.0
alors que @hierynomus a pris la relève en tant que mainteneur de SSHJ
Système de build migré vers Gradle 2.2.1
Fusionné #150 : Correction d'un handle de fichier incorrect sur certains serveurs SSH, correctifs : #54, #119, #168, #169
jzlib
est rendu facultatif dans le regroupement OSGi, correctifs : #162
Amélioration de certains niveaux de journalisation, correctifs : #161
Fusionné #156, #164, #165 : tailles de bloc fixes pour hmac-sha2-256
et hmac-sha2-512
Fusionné #141 : Ajouter la prise en charge des proxys
Fusionné #157, #163 : correctifs de documentation et de construction
BouncyCastle mis à niveau vers 1.51, correctifs : #142
Implémentation du keep-alive avec détection des pertes de connexion, correctifs #166