Wie zu beheben Java UnknownHostKey, während mit JSch SFTP-Bibliothek?
Bin ich mit einem java-Programm, wo ich die übertragung einer Datei von einem Ordner zu einem anderen, mit Java SFTP. Das problem das ich habe ist, dass ich immer folgende Fehler in meinem Java SFTP (mit 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.
RSA-Schlüssel Fingerabdruck ist a2:39:3f:44:88:e9:1f:d7:d1:71:f4:85:98:fb:90:dc
bei com.jcraft.jsch.Sitzung.checkHost(Session.java:797)
com.jcraft.jsch.Sitzung.die Verbindung(Session.java:342) at
com.jcraft.jsch.Sitzung.die Verbindung(Session.java:183) at
FileTransfer.main(FileTransfer.java:33) - Prozess beendet mit exit-code
0.
Folgendes ist mein code bisher:
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
Mein Cygwin eingerichtet ist, und ich überprüft (mit netstat -a -b
), dass es läuft.
InformationsquelleAutor Coffee | 2015-09-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sie versuchen, Sie zu überspringen eines host-Schlüssels überprüfen, indem Sie
StrictHostKeyChecking
zuno
.Aber Sie haben zu tun, dass vor der Prüfung, d.h. bevor die
session.connect()
.Solltest du sowieso nie tun, es sei denn, Sie interessieren sich nicht für die Sicherheit. Der host-key überprüfung ist es, Sie zu schützen aus man-in-the-middle-Angriffe.
Statt, die Einrichtung einer erwarteten host-key zu lassen JSch überprüfen.
Beispiel:
Call
JSch.setKnownHosts
bietet einen Pfad zu einer.ssh/known_hosts
-wie-Datei.Generieren, die
.ssh/known_hosts
-wie die Datei, die Sie verwenden können, einessh-keyscan
Befehl von OpenSSH. Wenn Sie eine Verbindung von einem *nix-server haben, sollten Sie den Befehl verfügbar, nur das ausführenEs wird ein format haben, wie:
Und Referenz des erzeugten
known_hosts
- Datei in Ihrem JSch-code.Wenn Sie Windows benutzen, können Sie ein Windows-build von
ssh-keyscan
aus Win32-OpenSSH-Projekt oder Git für Windows.Call
JSch.getHostKeyRepository().add()
zu erwartenden host-Schlüssel (z.B. hart-codiert ist, als Ihre anderen Anmeldeinformationen).Sehen Erstellen JSch HostKey B. von einer public-key-in .pub-format.
Ich habe ein Beispiel für die Generierung der
known_hosts
- Datei.Ich habe versucht mit
ssh-keyscan example.com > known_hosts
in Cygwin (unter Windows), aber ich bin mir nicht sicher, was als Nächstes zu tun hier.. ist es heruntergeladen auf meinem Computer ? Dank1) ich hoffe, Sie haben verstanden, dass die
example.com
ersetzt werden sollte mit dem eigentlichen SSH-server-hostname/IP. 2) Wenn Sie lokal ausführen, die Datei ist lokal gespeichert (kein download erforderlich). Nehmen Sie einfach einen Pfad zu den generiertenknown_hosts
- Datei und übergeben es anJSch.setKnownHosts
. 3) Überprüfen Sie, dass dieknown_hosts
sieht aus wie das Beispiel in meiner Antwort.Ok, jetzt verstehe ich, vielen Dank !!!
InformationsquelleAutor Martin Prikryl
Beiseite: mit "Cygwin" ich nehme an, du meinst sshd oder sftpd, weil Cygwin selbst nicht SSH.
Jedenfalls, wenn Sie wollen Jsch-client zu akzeptieren Schlüssel aus dem host, bewegen Sie den
.setConfig
Anrufe, legtStrictHostKeyChecking no
so ist es vorsession.connect()
. Alternativ müssen Sie Zugang zu einem Shop mit dem richtigen Schlüssel(N) für Ihren Rechner(N) wie @Martin erklärt-und Sie sollten immer tun, wenn eine Verbindung zu etwas anderes als "localhost" oder möglicherweise eine Maschine, die bestimmte, auf der gleichen, physikalisch-secure Netzwerk-segment (wie ein Kabel-LAN-hub in einem einzelnen Raum).guter Punkt, Hinzugefügt
was ist sftpd durch die Art und Weise?
Ich meinte "alle server (in Unix in der Regel etwas-d), die sftp-speziell, aber nicht den rest des ssh". Für Linux ist das meist (nicht immer) vsftpd, aber ich weiß nicht über cygwin. Ich soll wohl gesagt haben: "ein sftp-server".
Für Linux, es ist OpenSSH, nicht vsftpd. Das gleiche für Cygwin.
InformationsquelleAutor dave_thompson_085
jsch version : 0.1.55
mein problem gelöst mit :
**in meinem Fall jsch war auf der Suche für eine ip-Adresse in der Datei known_hosts-Datei
Es gibt eine überlastung von
setKnownHosts
nimmt einen Dateinamen ein. SoopenInputStream
ist ein overkill. Sie können einfach tunjsch.setKnownHosts(System.getProperty("user.home")+"/.ssh/known_hosts");
Danke , Hinzugefügt.
InformationsquelleAutor swaz