好吧,我正在收到UnknownHostKey异常。我不想使用StrictHostKeyChecking = no来解决此问题,如本文com.jcraft.jsch.JSchException: UnknownHostKey所示。我希望JSCH使用系统ssh使用的已知主机文件。可能吗?

最佳答案

是的,这是可能的,在建立JSCH连接时,您需要设置knownHosts文件位置:

示例JSCH连接代码:

        JSch jsch = new JSch();
        jsch.setKnownHosts(propertyReader.getKnownHosts());
        session = jsch.getSession(propertyReader.getUsername(),
                propertyReader.getSftpLocation(), 22);
        session.setPassword(propertyReader.getPassword());
        session.connect();
        channel = session.openChannel("sftp");
        channel.connect();
        ChannelSftp sftp = (ChannelSftp) channel;

        if (!StringUtils.isBlank(fileToPut)) {
            sftp.put(fileToPut, propertyReader.getSftpDirectory() + "/"
                    + newFileName);
        } else {
            sftp.put(propertyReader.getSftpDirectory() + "/" + newFileName,
                    ChannelSftp.OVERWRITE);
        }

这里的propertyReader是类,它设置所有sftp物流的位置
已知的hosts文件将位于运行Java程序的用户的〜/ .ssh目录中:
/home/<username>/.ssh/known_hosts

要将远程sftp服务器添加到已知的hosts文件,首先可以在服务器上使用常规sftp命令执行手动sftp,您需要在该服务器上使用同一用户运行Java进程:
sftp username@host

然后提供密码。或者,如果使用key:
sftp -i KEYFILE.pem username@host

如果建立了连接,它将提示您将主机添加到已知主机,并选择是。

将主机注册到已知的主机文件后,使用java程序进行连接。

07-27 21:37