如何解决如何通过Java代码将服务器主机密钥添加到known_hosts?
我正在使用 JSch 在 Java 中构建 SFTP 客户端。
public ChannelSftp connectToServer() throws Exception {
Process p = Runtime.getRuntime().exec(new String[]{"bash","-c","ssh-keyscan " + SFTP_HOST + " >> " + KNOWN_HOSTS_PATH});
p.waitFor();
JSch jsch = new JSch();
jsch.setKnownHosts(KNOWN_HOSTS_PATH);
jsch.addIdentity(PRIVATE_KEY);
sshSession = jsch.getSession(SFTP_USERNAME,SFTP_HOST,SFTP_PORT);
Properties sshConfig = new Properties();
sshConfig.put("StrictHostKeyChecking","yes");
sshSession.setConfig(sshConfig);
sshSession.connect();
Channel channel = sshSession.openChannel("sftp");
channel.connect();
return (ChannelSftp)channel;
}
如您所见,我将 StrictHostKeyChecking
设为 yes
。这要求我在 ~/.ssh/known_hosts
文件中包含我尝试连接的服务器的主机密钥。
我手头没有 SFTP 服务器的主机密钥,必须执行 bash 命令 ssh-keyscan <hostname>
才能动态获取主机密钥。
有没有办法使用Java代码获取服务器主机密钥,而无需执行shell命令?动态执行 shell 命令会引起任何安全问题吗?
编辑
我现在明白 ssh-keyscan
不能盲目信任 Is getting server host key with ssh-keyscan secure?,因此我得出的结论是,除非我从服务器管理员那里得到它,否则没有万无一失的方法来获取服务器的主机密钥自己。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。