为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用JSch SFTP库解析Java UnknownHostKey?

如何使用JSch SFTP库解析Java UnknownHostKey?

慕码人8056858 2019-09-03 19:31:26
我正在运行一个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密钥指纹是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)进程退出时退出代码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了它是否正在运行。
查看完整描述

3 回答

?
呼啦一阵风

TA贡献1802条经验 获得超6个赞

jsch版本:0.1.55


我的问题通过运行解决:


ssh-keyscan -t rsa <HOST_NAME> >> ~/.ssh/known_hosts

ssh-keyscan -t rsa <IP_ADDRESS_OF_HOST_NAME> >> ~/.ssh/known_hosts

**在我的情况下,jsch正在查找known_hosts文件中的ip地址


jsch.setKnownHosts(System.getProperty("user.home")+"/.ssh/known_hosts");


查看完整回答
反对 回复 2019-09-03
?
慕村9548890

TA贡献1884条经验 获得超4个赞

旁白:通过“Cygwin”我假设你的意思是sshd或sftpd,因为Cygwin本身不会做SSH。


无论如何,如果你想Jsch客户端接受来自主机的任意键,移动.setConfig,设置来电StrictHostKeyChecking no所以它是前 session.connect()。或者,您必须提供对包含主机正确密钥的商店的访问权限,如@Martin所解释的那样 - 当您连接到“localhost”以外的任何其他设备或者可能是某台机器时,您应该始终这样做相同的物理安全网段(例如单个房间内的有线LAN集线器)。


查看完整回答
反对 回复 2019-09-03
  • 3 回答
  • 0 关注
  • 987 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信