传输文件时,JSch SFTP代码挂起

问题描述 投票:1回答:1

我的任务是将一些文件从服务器复制到本地,我已经搜索了很多连接库并找到了JSch。我使用下面的代码,但是读取或移动文件需要花费太多时间。我不知道它是否有效。

JSch jsch = new JSch();
Session session = null;
try {
    // set up session
    session = jsch.getSession("userName","hostIP");
    // use private key instead of username/password
    session.setConfig(
            "PreferredAuthentications",
            "publickey,gssapi-with-mic,keyboard-interactive,password");
    jsch.addIdentity("***.ppk");
    java.util.Properties config = new java.util.Properties();
    config.put("StrictHostKeyChecking", "no");
    session.setConfig(config);
    session.connect();

    // copy remote log file to localhost.
    ChannelSftp channelSftp = (ChannelSftp) session.openChannel("sftp");
    channelSftp.connect();
    channelSftp.setInputStream(System.in);
    channelSftp.setOutputStream(System.out);
    System.out.println("shell channel connected....");

    ChannelSftp c = (ChannelSftp) channelSftp;

    System.out.println("done");
    channelSftp.get("report.xml", "C:\\Users\\akrishnan");
    channelSftp.exit();

} catch (Exception e) {
    e.printStackTrace();
} finally {
    session.disconnect();
}

是否有任何库可用于使用私钥文件(**。ppk)从我的Java代码连接服务器?

java ssh jsch
1个回答
1
投票

这很可能是导致挂起的原因:

channelSftp.setInputStream(System.in);
channelSftp.setOutputStream(System.out);

为“sftp”频道执行此操作会破坏一切。这没有道理。只需删除这两行。

检查官方JSch SFTP example - 没有这样的电话。

有关使用JSch进行文件传输的正确代码,请参阅:SFTP file transfer using Java JSch


强制警告:不要使用StrictHostKeyChecking=no盲目接受所有主机密钥。这是一个安全漏洞。你失去了对MITM attacks的保护。

有关正确(和安全)的方法,请参阅: How to resolve Java UnknownHostKey, while using JSch SFTP library?

© www.soinside.com 2019 - 2024. All rights reserved.