6

我希望能够从 known_hosts 中删除远程服务器密钥并再次添加它。远程服务器经常更新,所以我想自动删除远程主机密钥并将其新密钥添加到 known_hosts。我可以从 known_hosts 中删除密钥,尽管它很笨重并且使用 aProcess而不是通过 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 绕过此消息,但我使用其他方式连接到远程服务器,例如 aProcess并且当我运行这些命令时会出现该消息。

是否可以使用 JSCH 从 known_hosts 中删除和添加主机 ID?

尽管它不使用jsch,但可能相关:

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

4

2 回答 2

9

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

首先要明白,默认情况下,如果不指定 known_hosts 文件,JSch 仍然可以工作,它只会在内存中创建一个运行时 known_host 文件,并自动添加条目,只要将 Strict Host Key Checking 设置为 '不'。

如果您确实指定了 Known Hosts 文件,那么当 Strict Host Key Check 设置为“no”时,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。

于 2013-03-26T19:12:31.950 回答
0

无需以编程方式操作known_hosts

ssh -oStrictHostKeyChecking=no remote-host

或添加

StrictHostKeyChecking no

~/.ssh/config. 阅读ssh_config(5)手册页了解详细信息。

于 2013-03-26T16:38:59.397 回答