我可以使用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。