我可以使用JSCH将远程主机重新添加到known_host吗?

我希望能够从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可能相关:

如何编写程序(脚本)以从〜/ .ssh / known_hosts中删除过时的主机密钥?

无需以编程方式操作known_hosts

 ssh -oStrictHostKeyChecking=no remote-host 

或者添加

 StrictHostKeyChecking no 

~/.ssh/config 。 有关详细信息,请阅读ssh_config(5)手册页。

是的,您可以使用JSch将远程主机条目添加到known_hosts文件中。 正如Jim Garrison回答的那样,还有其他方法可以解决这个问题,但这里是如何在你的代码中做到这一点:

首先,要理解默认情况下,如果您没有指定known_hosts文件,JSch仍然可以工作,它只会在内存中创建一个运行时known_host文件,并且只要Strict Host Key Checking设置为’,就会自动添加entren没有’。

如果您指定了已知主机文件,那么当严格主机密钥检查设置为“否”时,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恢复为yes。