java - Jsch 已知主机不工作

标签 java ssh jsch

好吧,我收到 UnknownHostKey 异常。我不想像这篇文章 com.jcraft.jsch.JSchException: UnknownHostKey 那样使用 StrictHostKeyChecking=no 进行解决方法。我希望 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物流的位置 已知的主机文件将位于运行 java 程序的用户的 ~/.ssh 目录中:

/home/<username>/.ssh/known_hosts

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

sftp username@host

然后提供密码。或者如果使用 key :

sftp -i KEYFILE.pem username@host

如果连接建立,它会提示您将主机添加到已知主机中,回答"is"。

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

关于java - Jsch 已知主机不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31545120/

相关文章:

hadoop - root @ localhost的密码是什么?

php - 通过代理 PHP 的 SSH 连接

java - 使用SFTP上传后本地文件未删除

java - 如何使用Java将字符串中单词的第一个字母大写?

java - 命名模块的未命名包中的非编译单元是否打开?

java - Minecraft 插件前缀 (Java)

接口(interface)的java类和类型

git - 无法从 Vagrant 配置文件克隆私有(private)仓库

ant - com.jcraft.jsch.JSchException : Auth cancel

java - 在远程服务器上运行多个命令