好吧,我收到 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/