好吧,我正在收到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程序进行连接。