当前位置: 首页 > 知识库问答 >
问题:

如何解决Java UnknownHostKey,同时使用JSch SFTP库?

越学文
2023-03-14

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在com.jcraft.jsch.session.checkHost(session.java:797)在com.jcraft.jsch.session.connect(session.java:342)在com.jcraft.jsch.session.connect(session.java:183)在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)它是否正在运行。

共有1个答案

狄信然
2023-03-14

您试图通过将strithostkeychecking设置为no来跳过主机密钥检查。

但您必须在检查之前(即session.connect()之前)执行该操作。

无论如何,你永远不应该这样做,除非你不关心安全性。主机密钥检查是为了保护您免受中间人攻击。

>

  • 调用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项目或Git for Windows获得ssh-keyscan的Windows构建。

  •  类似资料:
    • Values.java AmountDetail.java 当我在postman if子句中点击API时,它工作正常,但如果我想检查else,它会给出错误。我觉得铸造是这里的问题,但我不知道如何返回else块的值。

    • 我正在为一个控制器方法编写一个单元测试,该方法接受一个和一个自定义对象。到目前为止,我可以看到MultipartFile是请求的正确格式,但MessageAttachment不是。 通过解析,会抛出服务器端500错误,其中包含。 这似乎是一个问题,在测试中转换到MockMultipartFile消息附件。这类似于这里显示的示例-https://stackoverflow.com/a/2180518

    • 问题内容: 已锁定 。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 我对这种东西是陌生的,但是最近我已经听到很多关于Node.js有多出色的信息。考虑到我一般喜欢使用jQuery和JavaScript有多少,我不禁想知道如何决定何时使用Node.js。我想到的Web应用程序有点像Bitly-需要一些内容,然后将其存档。 从过去几天我所做的所有作业中,我获得

    • 我是新手,但最近我听到很多关于Node.js有多好的消息。考虑到总体上我是多么热爱使用jQuery和JavaScript,我不禁想知道如何决定何时使用Node.js。我心目中的web应用程序类似于Bitly-获取一些内容,并将其存档。 从过去几天我一直在做的所有作业中,我获得了以下信息。node.js 是一个命令行工具,可以作为常规web服务器运行,允许运行JavaScript程序 使用great

    • 问题内容: 我必须在我的Java应用程序中打印EST时间。我使用以下方法将时区设置为EST: 但是,当在该时区遵循夏令时时,我的代码将无法打印正确的时间(它可以少打印1小时)。 不管是否遵守夏令时,如何使代码始终读取正确的时间? PS:我尝试将时区设置为EDT,但不能解决问题。 问题答案: 这是开始的问题: 应该完全避免使用3个字母的缩写,而应使用TZDB区域ID。EST是东部标准时间- 标准时间

    • 问题内容: 如果我使用端口80运行服务器,并且尝试使用xmlHTTPrequest,则会出现此错误: 如果我要在端口80上运行服务器时发出请求,为什么nodejs会出现问题?对于网络浏览器来说,这不是问题:在服务器运行时,我可以在Internet上冲浪。 服务器是: 并要求: 问题答案: 表示试图将服务器绑定到的端口号已被使用。 因此,在您的情况下,必须已经在端口80上运行了服务器。 如果在此端口