Warnung | SSHJ-Versionen bis einschließlich 0.37.0 sind anfällig für CVE-2023-48795 – Terrapin. Bitte aktualisieren Sie auf 0.38.0 oder höher. |
Schauen Sie sich zunächst eines der Beispiele an. Hoffentlich wird es für Sie angenehm sein, mit der API zu arbeiten :)
Um SSHJ zu erhalten, haben Sie zwei Möglichkeiten:
Fügen Sie Ihrem Projekt eine Abhängigkeit von SSHJ hinzu.
Bauen Sie SSHJ selbst.
Und wenn Sie möchten, können Sie auch die SSHJ-Beispiele ausführen.
Binäre Versionen von SSHJ werden hier nicht bereitgestellt, aber Sie können es bei Bedarf direkt aus dem Maven Central-Repository herunterladen.
Wenn Sie Ihr Projekt mit Maven erstellen, können Sie der pom.xml
die folgende Abhängigkeit hinzufügen:
< dependency >
< groupId >com.hierynomus</ groupId >
< artifactId >sshj</ artifactId >
< version >0.38.0</ version >
</ dependency >
Wenn Ihr Projekt mit einem anderen Build-Tool erstellt wird, das das Maven Central-Repository verwendet, übersetzen Sie diese Abhängigkeit in das von Ihrem Build-Tool verwendete Format.
Klonen Sie das SSHJ-Repository.
Stellen Sie sicher, dass Sie Java6 mit den Java Cryptography Extensions (JCE) mit unbegrenzter Stärke installiert haben.
Führen Sie den Befehl ./gradlew clean build
aus.
Im examples
gibt es ein separates Maven-Projekt, das zeigt, wie die Bibliothek in einigen Beispielfällen verwendet werden kann. Wenn Sie sie ausführen möchten, befolgen Sie diese Richtlinien:
Installieren Sie Maven 2.2.1 oder höher.
Klonen Sie das SSHJ-Repository.
Gehen Sie in das examples
und führen Sie den Befehl mvn eclipse:eclipse
aus.
Importieren Sie das examples
in Eclipse.
Ändern Sie die Anmeldedaten in den Beispielklassen (Adresse, Benutzername und Passwort) und führen Sie sie aus!
Lesen vonknown_hosts-Dateien zur Überprüfung des Hostschlüssels
Publickey, Passwort und tastaturinteraktive Authentifizierung
Befehls-, Subsystem- und Shell-Kanäle
lokale und Remote-Portweiterleitung
scp + vollständige SFTP-Version 0-3-Implementierung
Implementierungen/Adapter für folgende Algorithmen sind enthalten:
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 unterstützt auch die folgenden erweiterten (nicht offiziellen) Chiffren: 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 unterstützt außerdem die folgenden erweiterten (nicht offiziellen) Schlüsselaustauschalgorithmen: „[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
und [email protected]
(verzögerte Zlib)
pkcs5
, pkcs8
, openssh-key-v1
, [email protected]
, [email protected]
Wenn Sie etwas benötigen, das nicht im Lieferumfang enthalten ist, sollte es nicht allzu schwer sein, es hinzuzufügen (tragen Sie es bei!)
Vergleich der SSH-Implementierung
Java 8 oder höher
SLF4J 2.0.0
Hüpfburg
Issue-Tracker: https://github.com/hierynomus/sshj/issues
Gabel weg!
Entschärfter CVE-2023-48795 – Sumpfschildkröte
Zusammengeführt Nr. 917: Implementieren Sie die OpenSSH-Erweiterung für den strikten Schlüsselaustausch
Zusammengeführt #903: Korrektur für das Schreiben der Schlüsselzeichenfolge bekannter Hosts
Zusammengeführt Nr. 913: Verhindert, dass die Puffer für die Remote-Port-Weiterleitung unbegrenzt wachsen
Tests nach JUnit5 verschoben
Zusammengeführt #827: Fallback auf die Erweiterung [email protected], falls verfügbar
Zusammengeführt #904: ChaCha20-Poly1305-Unterstützung für OpenSSH-Schlüssel hinzugefügt
Zusammengeführt #899: Unterstützung für private AES-GCM-OpenSSH-Schlüssel hinzugefügt
Zusammengeführt #901: ZLib-Komprimierungsfehler behoben
Zusammengeführt #898: Verbesserte Handhabung fehlerhafter Dateien für private OpenSSH-Schlüssel
Integrationstests in JUnit5 umgeschrieben
Zusammengeführt #851: Race-Bedingung beim Schlüsselaustausch behoben, die zu zeitweiligem SSH_MSG_UNIMPLEMENTED führte
Zusammengeführt #861: DefaultSecurityProviderConfig hinzufügen mit deaktiviertem BouncyCastle
#881 zusammengeführt: Testklassen wurden in die JUnit-Jupiter-Engine umgeschrieben
Zusammengeführt #880: Java 7-Backport-Socket-Dienstprogramme entfernt
Zusammengeführt #879: Benutzerdefiniertes Base64 durch java.util.Base64 ersetzt
Zusammengeführt #852: Nicht verwendete Bcrypt-Passwort-Hashing-Methoden wurden entfernt
Zusammengeführt #874: Java 8-Mindestversion + Abhängigkeits-Upgrades
Zusammengeführt #876: newStatefulSFTPClient
ändern, um StatefulSFTPClient
zurückzugeben
Zusammengeführt #860: Upgrade auf Gradle 7.6.1
Zusammengeführt #838: Klasse Curve25519 durch X25519-Schlüsselvereinbarung ersetzt
Zusammengeführt #772: Abhängigkeit von jzlib entfernen
Zusammengeführt #835: TimeoutException-Meldung verbessert
Zusammengeführt #815: Unterstützt authPassword unter FreeBSD
Zusammengeführt #813: CHANNEL_CLOSE
zwischen isOpen und write-Aufruf verhindern.
Zusammengeführt #811: Transport.isKeyExchangeREquired
hinzufügen, um unnötiges KEXINIT zu verhindern
Zusammengeführt #743: Standard-Client-Anmeldeinformationen für AuthGssApiWithMic verwenden
Zusammengeführt #801: Stellen Sie den Thread-Interrupt-Status wieder her, nachdem eine InterruptedException abgefangen wurde
Zusammengeführt #793: PKCS5- und PKCS8-Klassen zusammenführen
Aktualisierte Abhängigkeiten SLF4J (1.7.36) und Logback (1.2.11)
Zusammengeführt Nr. 791: KeepAlive-Beispiele aktualisieren
Zusammengeführt #775: Unterstützung für SFTP-Lebenslauf hinzugefügt
Aktualisierte Abhängigkeiten BouncyCastle (1.70)
Zusammengeführt Nr. 687: Verbindung ordnungsgemäß schließen, wenn Remote-Verbindung geschlossen wird.
Zusammengeführt #741: Unterstützung für Testcontainer im Test-Setup hinzugefügt, um mehr Szenarien zu testen
Zusammengeführt #733: Korrekten Schlüsselvorschlag senden, wenn der Client den CA-Schlüssel kennt
Zusammengeführt #746: Fehler beim Lesen der privaten Putty-Schlüsseldatei mit Passphrase behoben
Zusammengeführt #742: Verwenden Sie Config.keyAlgorithms, um die rsa-sha2-Unterstützung zu ermitteln
Zusammengeführt #754: Verwenden Sie die SFTP-Protokollversion, um FXP-Umbenennungsflags bedingt festzulegen
Zusammengeführt #752: KeepAlive-Thread korrekt starten und beenden
Zusammengeführt Nr. 753: Stellen Sie bessere Thread-Namen bereit
Zusammengeführt #724: Parameter hinzugefügt, um die Länge des Vorauslesens zu begrenzen
Zusammengeführt #763: Probieren Sie alle öffentlichen Schlüsselalgorithmen für einen bestimmten Schlüsseltyp aus
Zusammengeführt #756: Veraltete Proxy-Verbindungsmethoden entfernen
Zusammengeführt #770: Unterstützung für ed25519
aes-128-cbc
Schlüssel hinzugefügt
Zusammengeführt #773: NPE beim Lesen leerer OpenSSHKeyV1KeyFile behoben
Zusammengeführt Nr. 777: Fordern Sie nicht zu viele Read-Ahead-Pakete an
EOF beim Schließen des Kanals senden (Fixes Nr. 143, Nr. 496, Nr. 553, Nr. 554)
Zusammengeführt #726: OpenSSH v1-Schlüssel mit vollständigen CRT-Informationen analysieren
Zusammengeführt Nr. 721: Bevorzugen Sie einen bekannten Hostschlüsselalgorithmus für die Hostschlüsselüberprüfung
Nr. 716, Nr. 729 und Nr. 730 zusammengeführt: Volle Unterstützung für PuTTY v3-Schlüsseldateien hinzugefügt.
#708 und #71 zusammengeführt: Unterstützung für private PKCS#8-Schlüssel hinzugefügt
Zusammengeführt Nr. 703: Unterstützt Host-Zertifikatschlüssel
Aktualisierte Abhängigkeiten BouncyCastle (1.69), SLF4j (1.7.32), Logback (1.2.6), asn-one (0.6.0)
Zusammengeführt Nr. 702: Unterstützt die Authentifizierung mit öffentlichen Schlüsseln mithilfe von Zertifikaten
Zusammengeführt #691: Korrektur für das Schreiben negativer Ganzzahlen ohne Vorzeichen in den Puffer
Zusammengeführt #682: Unterstützung für die Chiffre [email protected]
Zusammengeführt #680: Konfigurierbare Aufbewahrungszeiten für SCP-Übertragungen
Bump-Abhängigkeiten (asn-one 0.5.0, BouncyCastle 1.68, slf4j-api 1.7.30)
Zusammengeführt #660: Unterstützt ED25519- und ECDSA-Schlüssel im PuTTY-Format
Zusammengeführt #655: Bump BouncyCastle aufgrund von CVE
Zusammengeführt #653: Parameterklasse als HashMap-Schlüssel verwendbar machen
Zusammengeführt #647: Reduzieren Sie die Protokollebene für den Identifikationsparser
Zusammengeführt #630: Unterstützung für die Chiffren [email protected]
und [email protected]
hinzugefügt
Zusammengeführt #636: Verbesserte Android-Kompatibilität
Zusammengeführt Nr. 627: Schlüsselverlust verhindern
BREAKING CHANGE : setSignatureFactories
und getSignatureFactories
wurden aus der Konfiguration entfernt und durch getKeyAlgorithms
und setKeyAlgorithms
ersetzt
Behoben #588: Unterstützung für die Signaturen ssh-rsa2-256
und ssh-rsa2-512
hinzugefügt
Zusammengeführt #579: NPE in OpenSSHKnownHosts behoben
Zusammengeführt #587: Passwortfinder-Wiederholung für OpenSSHKeyV1KeyFile hinzugefügt
Zusammengeführt Nr. 586: Machen Sie KeyType mit dem Android Store kompatibel
Zusammengeführt #593: UserAuth.getAllowedMethods()
in den Rückgabetyp „Sammlung“ ändern
Zusammengeführt #595: Ermöglicht das Lesen von Schlüsseln beliebiger Länge
Zusammengeführt #591: Abfrage von SFTP-Erweiterungen zulassen
Zusammengeführt #603: Methode zum Erstellen eines Stateful SFTP-Clients hinzufügen
Zusammengeführt Nr. 605: Verwenden Sie Daemon-Threads, um das Blockieren des Herunterfahrens der JVM zu vermeiden
Zusammengeführt #606: Verwenden Sie standardmäßig immer den JCERandom RNG
Zusammengeführt Nr. 609: Löschen Sie die Passphrase nach der Verwendung, um Sicherheitsprobleme zu vermeiden
Zusammengeführt #618: Lokalen Port von DirectConnection für die Verwendung mit OpenSSH > 8.0 korrigieren
Zusammengeführt #619: BouncyCastle auf 1.66 aktualisiert
Zusammengeführt #622: Senden Sie „ext-info-c“ mit KEX-Algorithmen
Zusammengeführt #623: Transportkodierung von nistp521
-Signaturen korrigiert
Zusammengeführt #607: Korrigieren Sie die Berechnung von Pubkeys zu Schlüsselalgorithmen
Zusammengeführt #602: Bestimmung des RSA-Zertifikatschlüssels korrigiert
Behoben #415: Das fälschlicherweise vorangestellte „/“ vor dem Pfad in SFTPClient.mkdirs wurde behoben
Unterstützung für ETM-MAC-Algorithmen (Encrypt-then-Mac) hinzugefügt.
Behoben #454: Fehlende Kapazitätsprüfung für Buffer.putUint64 hinzugefügt
Behoben #466: Sperrzeitlimit für Remote-Aktionen hinzugefügt, um ein Hängenbleiben zu verhindern
Behoben #470: EdDSA zur standardmäßigen (ersten) Signaturfabrik gemacht
Behoben #467: AES256-CBC als Verschlüsselungsmodus in der OpenSh-Key-v1-Unterstützung hinzugefügt
Behoben #464: [email protected] in DefaultConfig aktiviert
Behoben #472: Vom Server initiierte globale Anfragen verarbeiten
Behoben #485: Unterstützung für alle Schlüsseltypen zu openssh-key-v1-Schlüsseldateien hinzugefügt.
Behoben #413: UTF-8 für PrivateKeyFileResource verwenden
Behoben #427: Unterstützt verschlüsselte ed25519 openssh-key-v1-Dateien
BouncyCastle wurde auf 1.60 aktualisiert
Unterstützung für [email protected] MAC hinzugefügt
Unterstützung für hmac-ripemd160 hinzugefügt
Behoben #382: Escape im WildcardHostmatcher behoben
Integrationstestsuite mit Docker gegen OpenSSH hinzugefügt
Behoben #187: Längenfehler in Buffer.putString behoben
Behoben #405: Hostüberprüfung fortsetzen, wenn der erste Hostschlüssel nicht übereinstimmt.
Zusammengeführt #372: Upgrade auf „net.i2p.crypto:eddsa:0.2.0“
Fehler Nr. 355 und Nr. 354 behoben: Signaturbytes korrekt dekodieren
Behoben #365: Unterstützung für neue OpenSSH-Fingerabdrücke von Serverschlüsseln hinzugefügt
Behoben #356: Schlüsseltyperkennung für öffentliche ECDSA-Schlüssel korrigiert
SSHJ Java9 kompatibel gemacht
Behoben #341: Das Gehen des Pfads während des rekursiven Kopierens wurde behoben
Zusammengeführt #338: ConsolePasswordFinder hinzugefügt, um das Passwort aus stdin zu lesen
Zusammengeführt #336: Unterstützung für die Signaturen ecdsa-sha2-nistp384 und ecdsa-sha2-nistp521 hinzugefügt
Behoben #331: Unterstützung für Platzhalter in der Datei „known_hosts“ hinzugefügt
Zusammengeführt #322: Regression von 40f956b behoben (ungültiger Längenparameter im Ausgabestream)
Zusammengeführt Nr. 319: Unterstützung für die Zertifikatsschlüsseldateien [email protected]
und [email protected]
hinzugefügt
Gradle auf 3.4.1 aktualisiert
Zusammengeführt #305: Unterstützung für benutzerdefinierte String-Kodierung hinzugefügt
Behoben #312: BouncyCastle auf 1.56 aktualisiert
Zusammengeführt Nr. 294: Verweis auf ED25519 durch Konstante statt durch Namen
#293, #295 und #301 zusammengeführt: OSGi-Paketierung korrigiert
Neue Diffie Hellman-Gruppen 15–18 für stärkere KeyExchange-Algorithmen hinzugefügt
PKCS5-Schlüsseldateien in DefaultConfig aktiviert
Zusammengeführt #291: Das Laden von sshj.properties und verkettete Ausnahmemeldungen wurden behoben
Zusammengeführt #284: Interrupt im Keepalive-Thread korrekt abfangen
Behoben #292: Übergeben Sie die konfigurierte RandomFactory an Diffie Hellman KEX
Behoben #256: SSHJ wird jetzt erstellt, wenn kein Git-Repository vorhanden ist
LocalPortForwarder unterbricht jetzt korrekt seinen eigenen Thread bei close()
Behoben #276: Unterstützung für ed-25519 und neues OpenSSH-Schlüsselformat hinzugefügt
Behoben #280: Version aus einer generierten sshj.properties-Datei lesen, um die Version während der Aushandlung korrekt auszugeben
Android-Kompatibilität behoben
Upgrade auf Gradle 3.0
Zusammengeführt #271: Laden Sie bekannte_Hosts, ohne dass BouncyCastle erforderlich ist
Zusammengeführt Nr. 269: Auf vielfachen Wunsch wurde die Java6-Unterstützung zurückgebracht
Zusammengeführt Nr. 267: Unterstützung für Protokollierung pro Verbindung hinzugefügt (Behebung Nr. 264)
Nr. 262, Nr. 265 und Nr. 266 zusammengeführt: Unterstützung für PKCS5-Schlüsseldateien hinzugefügt
String von SFTP-Dateiattributen behoben (Behebung Nr. 258)
Behoben #255: Nicht mehr abhängig von „privat markierten“ Klassen im Paket net.i2p.crypto.eddsa.math
, behebt OSGI-Abhängigkeiten
Die Identifikationszeile des SSH-Servers, die mit „n“ statt mit „rn“ endet, wird nachsichtig behandelt.
Verbessertes Parsen der SSH-Server-Identifikation. Zu lange Kopfzeilen unterbrechen das Protokoll jetzt nicht mehr.
Einführung einer grundlegenden Änderung im SFTP-Kopierverhalten : Bisher verhielt sich ein SFTP-Kopiervorgang anders, wenn sowohl Quelle als auch Ziel Ordner mit unterschiedlichen Namen waren. In diesem Fall wurde nicht der Inhalt der Quelle in das Zielverzeichnis kopiert, sondern das Verzeichnis selbst als Unterverzeichnis des Zielverzeichnisses kopiert. Dieses Verhalten wurde zugunsten des Standardverhaltens entfernt, bei dem der Inhalt der Quelle in das Ziel kopiert wird. Das Verhalten an die Funktionsweise von SCP anpassen.
Behoben #252 (via: #253): Gleichnamige Unterverzeichnisse werden nicht mehr versehentlich zusammengeführt
Behoben #239: Remote-Port-Weiterleitungen funktionierten nicht, wenn Sie die leere Zeichenfolge als Adresse oder eine Catch-All-Adresse verwendeten.
Behoben #242: OSGI-Header zum Quell-JAR-Manifest hinzugefügt
Behoben #236: Remote-Port-Weiterleitung mit dynamischer Portzuweisung schlägt mit BufferUnderflowException fehl
Gradle-Verteilung auf 2.12 aktualisiert
Geschlossen #234: Java6-Unterstützung eingestellt (0.15.0 war aufgrund der Java7-Abhängigkeit bereits Java6-inkompatibel)
Behoben #118: Konfigurationsschalter zum Warten auf eine Server-ID hinzugefügt, bevor die Client-ID gesendet wird.
Behoben #114: Javadoc hinzugefügt, dass Sie bei einem Befehl immer close() aufrufen müssen, bevor Sie die Exit-Codes prüfen.
Behoben #237: Race-Bedingung behoben, wenn eine globale Anfrage [email protected]
direkt nach einer erfolgreichen Authentifizierung empfangen wird.
Behoben #220: Unterstützung für ssh-ed25519
-Hostschlüssel hinzugefügt
Behoben #225: Fehler in der ECDSA-Fingerabdruckberechnung behoben, der manchmal zu einem falschen Fingerabdruck führte
arcfour
Stream Ciphers von RFC4253 und RFC4345 hinzugefügt
Alle Blockchiffren von RFC4344 und RFC4253 hinzugefügt
Behoben #171: Unterstützung für den Schlüsselaustauschalgorithmus [email protected]
hinzugefügt
Unterstützung für die Schlüsselaustauschalgorithmen ecdh-sha2-nistp256
, ecdh-sha2-nistp384
und ecdh-sha2-nistp521
hinzugefügt
Behoben #167: Unterstützung für die Schlüsselaustauschmethoden diffie-hellman-group-exchange-sha1
und diffie-hellman-group-exchange-sha256
hinzugefügt
Behoben #212: Pfad-Escape konfigurieren, damit die Shell-Erweiterung ordnungsgemäß funktioniert
Zusammengeführt #210: RemoteFileInputStream.skip gibt falschen Wert zurück (Behebt #209)
Zusammengeführt Nr. 208: Unterstützung für SCP-Bandbreitenbeschränkung hinzugefügt
Zusammengeführt Nr. 211: Die Erkennung des Schlüsseldateiformats wurde robuster gemacht
Zusammengeführt #199: Fix für IndexOutOfBoundsException in ReadAheadRemoteFileInputStream, behebt #183
Zusammengeführt #195: Neue Authentifizierung unterstützt: gssapi-with-mic
Zusammengeführt Nr. 201: Neue Option zur Überprüfung ausgehandelter Schlüsselaustauschalgorithmen
Zusammengeführt Nr. 196: Korrektur für die Suche nach dem vollständigen Hostnamen in der Datei „Bekannte Hosts“.
Unterstützung für HTTP-Proxys beim Ausführen von JDK6 oder JDK7 hinzugefügt, Korrekturen: #170
Zusammengeführt Nr. 186: Fehlerbehebung für die Erkennung des Endes des Streams
Kompilierung nach JDK6, Korrekturen Nr. 179 und Nr. 185
Socket und Kanal ordnungsgemäß schließen, wenn LocalPortForwarder den Kanal nicht öffnen und starten kann (Behebungen Nr. 175 und Nr. 176)
Zusammengeführt #181: Ungültige Schreibpaketlänge beim Lesen mit Offset (Behebt #180)
Der neue Maven koordiniert com.hierynomus:sshj:0.11.0
da @hierynomus die Rolle des Betreuers von SSHJ übernommen hat
Build-System auf Gradle 2.2.1 migriert
Zusammengeführt Nr. 150: Korrektur für falsches Dateihandle auf einigen SSH-Servern, Korrekturen: Nr. 54, Nr. 119, Nr. 168, Nr. 169
jzlib
in der OSGi-Bündelung optional gemacht, Korrekturen: #162
Einige Protokollebenen verbessert, Korrekturen: #161
Zusammengeführt #156, #164, #165: Feste Blockgrößen für hmac-sha2-256
und hmac-sha2-512
Zusammengeführt Nr. 141: Proxy-Unterstützung hinzufügen
#157, #163 zusammengeführt: Dokument- und Build-Korrekturen
BouncyCastle auf 1.51 aktualisiert, Korrekturen: #142
Keep-Alive mit Erkennung von Verbindungsabbrüchen implementiert, Fehlerbehebung Nr. 166