com.jcraft.jsch.JSchException: UnknownHostKey
Ich versuche, Jsch zum herstellen einer SSH-Verbindung in Java. Mein code erzeugt die folgende Ausnahme:
com.jcraft.jsch.JSchException: UnknownHostKey: mywebsite.com.
RSA key fingerprint is 22:fb:ee:fe:18:cd:aa:9a:9c:78:89:9f:b4:78:75:b4
Kann ich nicht finden, wie Sie den host-key in der Jsch-Dokumentation. Ich habe meinen code unten.
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
public class ssh {
public static void main(String[] arg) {
try {
JSch jsch = new JSch();
//create SSH connection
String host = "mywebsite.com";
String user = "username";
String password = "123456";
Session session = jsch.getSession(user, host, 22);
session.setPassword(password);
session.connect();
} catch(Exception e) {
System.out.println(e);
}
}
}
Kommentar zu dem Problem
Versuchen Sie, Herunterfahren sshd auf deinem *nix-host und starten Sie einen einzelnen thread im Vordergrund: /usr/sbin/sshd -d Diese wird Ihnen eine Menge von debugging-Informationen von der sshd-Seite.
@AmmSokun jeder in der Lage war, dieses problem zu lösen. Siehe die Antworten.
InformationsquelleAutor der Frage Alex | 2010-01-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich würde entweder:
ssh
von der Befehlszeile aus, und akzeptieren Sie die public-key (der host Hinzugefügt wird~/.ssh/known_hosts
und alles sollte dann funktionieren Jsch) -ODER-Konfigurieren JSch nicht zu verwenden "StrictHostKeyChecking" (dies führt zu Unsicherheiten und sollte nur für Testzwecke verwendet werden), mit dem folgenden code:
Option #1 (durch hinzufügen der host der
~/.ssh/known_hosts
- Datei) hat meine Vorliebe.InformationsquelleAutor der Antwort Pascal Thivent
Es ist ein Sicherheitsrisiko zu vermeiden, host Schlüssel überprüfen.
JSch verwendet HostKeyRepository-Schnittstelle und seiner implementation KnownHosts Klasse zu verwalten. Sie können geben Sie eine Alternative Implementierung, die es ermöglicht, einzelne Tasten durch die Umsetzung HostKeyRepository. Oder Sie können halten Sie die Tasten, die Sie zulassen möchten eine Datei in das known_hosts-format und rufen
Oder mit einem öffentlichen Schlüssel-String wie unten.
sehen Javadoc für mehr details.
Wäre dies eine sichere Lösung.
Jsch ist open source, und Sie können laden Sie die Quelle, aus hier. In den Beispiele-Ordner, suchen Sie nach KnownHosts.java um mehr details wissen.
InformationsquelleAutor der Antwort krishnakumarp
Je nachdem, was Programm Sie verwenden für ssh, der Weg, um die richtigen Schlüssel variieren können. Putty (beliebt bei Windows) nutzt Ihr eigenes format für ssh-keys. Mit den meisten Varianten von Linux und BSD, die ich gesehen habe, da müssen Sie nur mal in
~/.ssh/known_hosts
. Ich in der Regel ssh von einem Linux-Rechner und kopieren Sie dann diese Datei auf eine Windows-Maschine. Dann benutze ich etwas ähnliches wieVorausgesetzt, ich habe die Datei abgelegt
C:\Users\cabbott
auf meinem Windows-Rechner. Wenn Sie nicht haben Zugang zu einem Linux-Rechner, versuchen Sie http://www.cygwin.com/Vielleicht jemand anderes kann darauf hindeuten, eine andere Windows-alternative. Ich finde putty Umgang mit SSH-Schlüsseln durch die Speicherung in der Registrierung, in einem nicht-standard-format störend, zu extrahieren.
InformationsquelleAutor der Antwort Charity Leschinski
Obwohl die Frage schon beantwortet, im Allgemeinen, ich habe mich selbst gefunden, dass es eine Fall, wenn auch bestehende known_hosts Eintrag nicht helfen. Dies geschieht, wenn ein SSH-server sendet ECDSA Fingerabdruck und als ein Ergebnis, müssen Sie einen Eintrag wie diesen:
Das problem ist, dass JSch bevorzugt SHA_RSA und während der Verbindung, es wird versuchen, zu vergleichen, SHA-RSA-Fingerabdruck, der wird mit Fehlermeldung "unbekannter host".
, Dies zu beheben, führen Sie einfach:
oder beschweren Jcraft über Bevorzugung SHA_RSA anstatt die lokalen HostKeyAlgorithms Einstellung, obwohl Sie scheinen nicht zu gespannt zu beheben Ihre bugs.
InformationsquelleAutor der Antwort kszatan
Versorgung den öffentlichen rsa-Schlüssel von host :-
InformationsquelleAutor der Antwort Mark Beer
Können Sie auch führen Sie den folgenden code. Es ist getestet und funktioniert.
Bitte ersetzen Sie die entsprechenden Werte ein.
InformationsquelleAutor der Antwort Vishnu Prasad Kallummel
Können Sie auch einfach
Es ist nicht sicher und es ist eine Problemumgehung, nicht geeignet für live-Umgebung, wie es wird, deaktivieren Sie die weltweit bekannten host Schlüssel überprüfen.
InformationsquelleAutor der Antwort Amaury D
Ersetzen Sie nur "user", "pass", "SSHD_IP". Und erstellen Sie eine Datei namens known_hosts.txt mit dem content von dem server ~/.ssh/known_hosts. Sie erhalten eine shell.
InformationsquelleAutor der Antwort dalvarezmartinez1
Diese stackoverflow-Eintrag ist über den host-key überprüfung, und es ist kein Bezug auf die public-key-Authentifizierung.
Als für die public-key-Authentifizierung, versuchen die folgende Beispiel mit Ihr Klartext(nicht verschlüsselt) privaten Schlüssel,
InformationsquelleAutor der Antwort ymnk
Einstellung bekannten host ist besser als die Einstellung fingure drucken Wert.
Wenn Sie bekannten host, versuchen Sie es manuell über ssh (sehr erste Zeit, bevor die Anwendung ausgeführt wird) aus der box läuft die Anwendung.
InformationsquelleAutor der Antwort sreenath V
InformationsquelleAutor der Antwort Rakesh Acharya
Verlor ich viel Zeit auf dieses dumme Thema, und ich denke, die message ist ganz richtig, "es gibt nicht den host in der Datei bin ich auf" aber Sie können mehr als eine know_host Datei auf Ihrem system (als Beispiel ich bin mit mobaXterm und es zu halten seine eigene in der installation-Verzeichnis mounten der home von root).
Wenn Sie erleben : es funktioniert von der Kommandozeile, aber nicht die Anwendung, versuchen Sie den Zugriff auf Ihre remote-server mit ssh und überprüfen Sie mit verbose option-v die Datei wird derzeit verwendet, ein Beispiel folgt:
wie Sie sehen können, der Schlüssel wurde gefunden in :
und nicht in meinem windows home unter C:\Users\my_local_user\.ssh , ich habe einfach zusammengeführt Sie und ausgerichtet für das Problem zu lösen.
Hoffe, dies hilft jemand in der Zukunft
InformationsquelleAutor der Antwort loreii