如何使用JSch SFTP库解析Java UnknownHostKey?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了如何使用JSch SFTP库解析Java UnknownHostKey?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2996字,纯文字阅读大概需要5分钟。
内容图文
![如何使用JSch SFTP库解析Java UnknownHostKey?](/upload/InfoBanner/zyjiaocheng/716/7efbe146bbfc4b8ca4e16dc69293822f.jpg)
我正在运行一个java程序,我使用Java SFTP将文件从一个文件夹传输到另一个文件夹.我遇到的问题是我在Java SFTP中遇到以下错误(使用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 key fingerprint is a2:39:3f:44:88:e9:1f:d7:d1:71:f4:85:98:fb:90:dc
at com.jcraft.jsch.Session.checkHost(Session.java:797) at
com.jcraft.jsch.Session.connect(Session.java:342) at
com.jcraft.jsch.Session.connect(Session.java:183) at
FileTransfer.main(FileTransfer.java:33) Process exited with exit code
0.
以下是我目前的代码:
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
设置了我的Cygwin,我检查了(使用netstat -a -b)它正在运行.
解决方法:
您试图通过将StrictHostKeyChecking设置为no来跳过主机密钥检查.
但是你必须在检查之前,即在session.connect()之前这样做.
无论如何,你永远不应该这样做,除非你不关心安全性.主机密钥检查是为了保护您免受man-in-the-middle attacks的影响.
相反,设置一个预期的主机密钥让JSch验证它.
例如:
>调用JSch.setKnownHosts,提供.ssh / known_hosts类文件的路径.
要生成类似.ssh / known_hosts的文件,可以使用OpenSSH中的ssh-keyscan命令.如果从* nix服务器连接,则应该可以使用该命令,只需运行即可
ssh-keyscan example.com > known_hosts
它将具有以下格式:
example.com ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA0hVqZOvZ7yWgie9OHdTORJVI5fJJoH1yEGamAd5G3werH0z7e9ybtq1mGUeRkJtea7bzru0ISR0EZ9HIONoGYrDmI7S+BiwpDBUKjva4mAsvzzvsy6Ogy/apkxm6Kbcml8u4wjxaOw3NKzKqeBvR3pc+nQVA+SJUZq8D2XBRd4EDUFXeLzwqwen9G7gSLGB1hJkSuRtGRfOHbLUuCKNR8RV82i3JvlSnAwb3MwN0m3WGdlJA8J+5YAg4e6JgSKrsCObZK7W1R6iuyuH1zA+dtAHyDyYVHB4FnYZPL0hgz2PSb9c+iDEiFcT/lT4/dQ+kRW6DYn66lS8peS8zCJ9CSQ==
并在JSch代码中引用生成的known_hosts文件.
如果您使用的是Windows,则可以从Win32-OpenSSH project或Git for Windows获取Windows版本的ssh-keyscan.
>调用JSch.getHostKeyRepository().add()以提供预期的主机密钥(例如,硬编码,作为您的其他凭据).
见Creating JSch HostKey instance from a public key in .pub format.
内容总结
以上是互联网集市为您收集整理的如何使用JSch SFTP库解析Java UnknownHostKey?全部内容,希望文章能够帮你解决如何使用JSch SFTP库解析Java UnknownHostKey?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。