【问题标题】:Retrieving host key of remote SSH server using Java使用 Java 检索远程 SSH 服务器的主机密钥
【发布时间】:2021-09-08 16:14:32
【问题描述】:

我希望能够使用 Java 代码检索远程 SSH 主机的主机密钥。有没有这样做的库,我查看了 JSch 但找不到我想要的。

我知道我可以通过 Java 运行终端命令 ssh-keyscan <hostname>,但我希望这是最后的手段。寻求更好的解决方案。

【问题讨论】:

    标签: java ssh sftp jsch


    【解决方案1】:

    使用 JSch,您可以这样做:

    • check 方法存储其key 参数并且该方法返回NOT_INCLUDED 的方式实现HostKeyRepository interface

      public class HostKeyStore implements HostKeyRepository
      {
          public byte[] key;
      
          int check(String host, byte[] key)
          {
              this.key = key;
              return NOT_INCLUDED;
          } 
      
          // dummy implementations of the other methods
      }
      
    • 致电JSch.setHostKeyRepository

    • 开始与服务器的连接。您的HostKeyRepository.check 实现将使用服务器的主机密钥调用。并且连接不会发生,因为方法返回了NOT_INCLUDED


    但请确保您了解自己在做什么。仅当您想保留主机密钥以供将来参考时,这才有意义。不要尝试以这种方式绕过或自动执行主机密钥检查。您将失去对MITM attacks 的保护。

    如果您的目标是保留主机密钥,请考虑为此使用明确定义的机制,即known_hosts 文件。 JSch 可以读取和更新它,你不必显式地实现它。

    另外,如果你的目标是允许用户检查主机密钥,JSch 也有一个机制,设置StrictHostKeyChecking=ask 并实现UserInfo.promptYesNo

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-28
      • 2012-11-26
      • 2019-08-24
      • 2023-04-02
      • 2015-10-01
      • 2013-09-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多