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

咖啡 :

我正在运行一个Java程序,使用Java SFTP将文件从一个文件夹传输到另一个文件夹。我遇到的问题是我在Java SFTP(使用JSch)中遇到以下错误:

C:\ Oracle \ Middleware \ Oracle_Home \ oracle_common \ jdk \ bin \ javaw.exe-服务器-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密钥指纹为com.jcraft.jsch.Session.checkHost(Session.java:a2:39:3f:44:88:e9:1f:d7:d1:71:f4:85:98:fb:90:dc 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了它的运行(使用)。

马丁·普里克里(Martin Prikryl):

您正在尝试通过将设置StrictHostKeyChecking来跳过主机密钥检查no

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


无论如何,除非您不关心安全性,否则永远不要这样做。主机密钥检查可以保护您免受中间人攻击

而是设置一个预期的主机密钥,以使JSch对其进行验证。

例如:

  • 呼叫JSch.setKnownHosts提供类似.ssh/known_hosts文件的路径

    要生成.ssh/known_hosts-like文件,可以使用ssh-keyscanOpenSSH中命令。如果从* nix服务器连接,则应具有可用的命令,只需运行

    ssh-keyscan example.com > known_hosts
    

    格式如下:

    example.com ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA0hVqZOvZ7yWgie9OHdTORJVI5fJJoH1yEGamAd5G3werH0z7e9ybtq1mGUeRkJtea7bzru0ISR0EZ9HIONoGYrDmI7S+BiwpDBUKjva4mAsvzzvsy6Ogy/apkxm6Kbcml8u4wjxaOw3NKzKqeBvR3pc+nQVA+SJUZq8D2XBRd4EDUFXeLzwqwen9G7gSLGB1hJkSuRtGRfOHbLUuCKNR8RV82i3JvlSnAwb3MwN0m3WGdlJA8J+5YAg4e6JgSKrsCObZK7W1R6iuyuH1zA+dtAHyDyYVHB4FnYZPL0hgz2PSb9c+iDEiFcT/lT4/dQ+kRW6DYn66lS8peS8zCJ9CSQ==
    

    known_hosts在您的JSch代码中引用生成的文件。

    如果您使用的是Windows,则可以ssh-keyscanWin32-OpenSSH项目或Windows的Git获取Windows版本。

  • 致电JSch.getHostKeyRepository().add()以提供期望的主机密钥(例如,作为其他凭据的硬编码)。

    请参阅从.pub格式的公共密钥创建JSch HostKey实例

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

“无效的专用密钥”使用JSch时

为什么不使用Java Jsch cd命令的工作?

使用Jsch Java执行sudo命令

使用Jsch和公钥连接sftp

如何使用Java SFTP库JSch将文件从一个目录传输到另一个目录?

如何使用Java JSch库逐行读取远程文件?

com.jcraft.jsch.JSchException:UnknownHostKey

使用JSch从SFTP服务器下载文件

使用JSch上传Java SFTP,但是如何覆盖当前文件?

使用Java 1.4.2的jsch-0.1.42中的“验证失败”

使用JSch从SFTP服务器检索数据

如何使用JSch执行多项操作

有关com.jcraft.jsch.JSchException的查询:UnknownHostKey:xycom。DSA密钥指纹为“ ac:ew:....”

尝试使用Spring Config Server时如何解决“没有可用的密码” JSch异常?

JSch:UnknownHostKey异常,即使在known_hosts文件中存在主机密钥指纹

JSch:当主机密钥位于known_hosts中并且添加JCE之后,UnknownHostKey异常

如何在JSch中使用SFTP通道执行shell命令?

使用JSch连接到SFTP时如何选择网络接口

使用JSCH Java的反向SSH隧道

使用SFTP或SCP使用JSch更改文件权限

使用SFTP和JSch的连接问题:com.jcraft.jsch.JSchException

如何使用JSch将多行命令输出存储到变量

使用 Jsch 进行异步 sftp 文件传输?

无法使用 jsch 库执行 .csh 脚本 - 退出 1

使用 JSch 库上传重试机制

如何使用 Jsch 递归 FTP 目录结构?

无法使用 jsch 执行 sftp 子命令

不使用 JSch 从 SFTP 服务器下载文件

如何使用 StrictHostKeyChecking (Jsch) 建立 SSH 连接