我希望能够从known_hosts中删除远程服务器密钥并再次添加。远程服务器经常更新,因此我想自动删除远程主机密钥并将其新密钥添加到known_hosts。我可以从known_hosts中删除密钥,虽然它很笨重并且使用Process
而不是通过JSCH。这有效,但每当我尝试访问服务器时都会遇到此消息:
The authenticity of host '192.168.1.1 (192.168.1.1)' can't be established.
RSA key fingerprint is 10:10:30:00:e7:0c:d3:18:cf:ac:42:e2:f3:51:25:bg.
Are you sure you want to continue connecting (yes/no)?
我知道可以使用UserInfo来解决此消息,但我使用其他方式连接到远程服务器,例如Process
,并且当我运行这些命令时会出现消息。
是否可以使用JSCH从known_hosts中删除并添加主机ID?
虽然不使用jsch可能相关:
How can I write a program (script) to remove obsolete host keys from ~/.ssh/known_hosts?
答案 0 :(得分:6)
是的,您可以使用JSch将远程主机条目添加到known_hosts文件中。正如Jim Garrison回答的那样,还有其他方法可以解决这个问题,但是这里是如何在你的代码中做到的:
首先,要理解默认情况下,如果你没有指定known_hosts文件,JSch仍然可以工作,它只会在内存中创建一个运行时的known_host文件,并且只要Strict Host Key Checking是自动添加的设为'不'。
如果您指定了已知主机文件,那么当严格主机密钥检查设置为“否”时,JSch将向该文件添加新条目
JSch jsch = new JSch();
jsch.setKnownHosts(knownHostsFile);
logger.info("known hosts file set: " + knownHostsFile);
jsch.addIdentity(privateKey);
logger.info("rsa private key loaded: " + privateKey);
Session session = jsch.getSession(user, host, port);
java.util.Properties config = new java.util.Properties();
// this setting will cause JSCH to automatically add all target servers' entry to the known_hosts file
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
session.connect();
这不是一种非常安全的行为,但它是让JSCh为您设置新服务器条目的便捷方式。在设置了已知的主机文件后,我建议将StrictHostKeyChecking恢复为是。
答案 1 :(得分:0)
无需以编程方式操纵known_hosts
ssh -oStrictHostKeyChecking=no remote-host
或添加
StrictHostKeyChecking no
到~/.ssh/config
。有关详细信息,请阅读ssh_config(5)
手册页。