【问题标题】:How to generate known_host file in windows machine [duplicate]如何在Windows机器中生成known_hosts文件[重复]
【发布时间】:2018-08-21 15:25:02
【问题描述】:

我正在使用 Jsch(Jcraft) 库与 SSH 服务器建立 SSH 连接,如下所示:

        JSch jsch = new JSch();
        String user = "****";
        String host = "****";
        int port = 22;
        String privateKey = "***.ppk";//Path to private key(The file is in .ppk format)
        try 
        {
            jsch.addIdentity(privateKey);
            Session session = jsch.getSession(user, host, port);
            java.util.Properties config = new java.util.Properties(); 
            config.put("StrictHostKeyChecking", "no");
            session.setConfig(config);
            session.connect();
            ChannelSftp sftpChannel = (ChannelSftp) session.openChannel("sftp");
            sftpChannel.connect();
            /*file transfer code*/
            sftpChannel.disconnect();
            session.disconnect();
        }
        catch (Exception e) 
        {
            e.printStackTrace();
        }

SSH 连接已成功建立,因为“StrictHostKeyChecking”已禁用。如果启用,我会收到以下错误:

com.jcraft.jsch.JSchException: UnknownHostKey: ******. RSA key f
 is *************
        at com.jcraft.jsch.Session.checkHost(Session.java:805)
        at com.jcraft.jsch.Session.connect(Session.java:345)
        at com.jcraft.jsch.Session.connect(Session.java:183)

我知道我们需要在代码中设置知道主机文件,如下所示:

jsch.setKnownHosts(knownHostsFileName); 

我无法通过以下命令生成 known_hosts 文件:

ssh-keyscan <HOST> > known_hosts 

它抛出以下错误:

'ssh-keyscan' is not recognized as an internal or external command,
operable program or batch file.

我只有 .ppk 格式的公钥和私钥。我没有 known_host 文件。
我们如何创建 known_host 文件?
为什么 ssh-keyscan 命令抛出错误 - 无法识别为内部/外部命令?

【问题讨论】:

  • 您是指以编程方式还是以交互方式创建它?在大多数情况下,该文件应该基于人类用户对 SSH 主机的信任来创建。
  • 不是以编程方式。如何以交互方式创建它?什么时候创建的?
  • “不工作” 不能作为问题描述工作。
  • 我的道歉。我只是想传达一下,当我在 Windows 命令行中运行 ssh-keyscan 命令时,我得到错误 'ssh-keyscan' is not Recognized as an internal or external command, operable program或批处理文件。
  • 我对重复问题的回答显示了如何为 Windows 获取 ssh-keyscan。在提出新问题之前,请仔细阅读答案。

标签: ssh jsch ssh-keys


【解决方案1】:

ssh-keyscan 是来自 Linux/Unix 的命令。为了在 Windows 上执行它,您需要一个经过修改以在 Windows 上运行的版本。最简单的方法是安装(download) 并打开Git Bash。在此控制台中,您可以使用ssh-keyscan 命令。

【讨论】:

    【解决方案2】:

    此文件通常由ssh-keyscan 创建,或由用户与 SSH 主机的连接创建。

    你可以通过命令简单地创建它

    ssh-keyscan [host]
    

    并保存输出。 -H 选项启用散列输出,但我不知道有问题的库是否可以使用它。

    请注意,如果没有先验证主机指纹,known_hosts 文件本身并不是很有用。以下注意事项直接来自 ssh-keyscan 手册页:

    SECURITY
         If an ssh_known_hosts file is constructed using ssh-keyscan without veri-
         fying the keys, users will be vulnerable to man in the middle attacks.
         On the other hand, if the security model allows such a risk, ssh-keyscan
         can help in the detection of tampered keyfiles or man in the middle
         attacks which have begun after the ssh_known_hosts file was created
    

    【讨论】:

    • 此命令在 Windows 操作系统中有效吗?我收到错误“ssh-keyscan”不是内部或外部命令、可运行程序或批处理文件。
    • 如果您使用的是 OpenSSH 或变体,可以。检查“PATH”环境变量?
    • Windows 命令提示符中的 ssh-keyscan 不起作用。它抛出错误“ssh-keyscan”不被识别为命令。我需要在 Path 环境变量中检查什么?
    猜你喜欢
    • 2022-01-21
    • 2023-01-15
    • 1970-01-01
    • 2016-07-09
    • 2011-05-10
    • 1970-01-01
    • 2015-03-31
    • 2011-02-01
    相关资源
    最近更新 更多