【问题标题】:How to handle ssh key?如何处理 ssh 密钥?
【发布时间】:2010-07-17 20:32:12
【问题描述】:
system("ssh test.host.com");

它是否要求永久添加密钥?

我想要它应该自动说是!

【问题讨论】:

  • 首先,请阅读为什么 ssh 会问这个问题以及总是响应“是”的安全隐患。然后决定这些是否为您所接受。然后问怎么做。

标签: linux perl ssh


【解决方案1】:

ssh 会询问您是否要连接,即使尚未检查主机的公钥,这是因为在您的 /etc/ssh/ssh_config~/.ssh/config 中有 StrictHostKeyChecking ask(或 yes)。如果您想自动将未知主机密钥添加到您的known_hosts 文件,您可以将其设置为no。如果您不想将其作为永久配置更改,您也可以在命令行中使用它:

system("ssh -o StrictHostKeyChecking=no test.host.com");

在任何一种情况下,ssh 都会在主机密钥不匹配时发出警告,并且会因为可能的中间人攻击而禁用密码验证。您仍然可以使用公钥身份验证登录。

【讨论】:

  • 为你+1:我必须同意;不知怎的,我被奇怪的语法弄糊涂了。
【解决方案2】:

必须有人同意第一个密钥是有效的。您可以要求用户手动将相关信息添加到 ~/.ssh/known_hosts(或自己做)。

【讨论】:

    【解决方案3】:

    在启动应用程序之前运行 SSH Agent 并使用它来添加键(Windows 上的菜单中的选项或 Unix 上命令行中的 ssh-add)。

    【讨论】:

    • 我不明白这个答案与所提出的问题有什么关系,也不明白为什么它得到了公认的答案。问题是关于将主机的公钥添加到本地 known_hosts 文件中。 ssh-add 命令用于客户端对服务器的公钥认证,而不是用于验证服务器的主机密钥。
    【解决方案4】:

    正如 Nathon 所说,解决此问题的正确方法是在已知密钥列表中获取 hosts 密钥。简单的方法是手动 ssh 到主机一次并回答是,然后密钥将缓存在 $HOME/.ssh/known_hosts 中。这必须为您将连接到的每台主机以及将运行该程序的每个用户完成。如果您在系统上拥有管理员权限,则您运行的 ssh 还可以将主机密钥添加到 /etc/ssh/ssh_known_hosts 以使所有用户都可以使用它们。

    如果您不知道脚本将连接到哪个主机,您可能需要查看 Expect 之类的模块来观察和响应主机密钥提示。虽然自动化这一步会破坏 ssh 提供的一些安全性。

    【讨论】:

      猜你喜欢
      • 2021-11-03
      • 2017-03-21
      • 2014-07-08
      • 1970-01-01
      • 2021-02-23
      • 2014-10-17
      • 1970-01-01
      • 2019-02-12
      • 2020-04-09
      相关资源
      最近更新 更多