【问题标题】:Can Ansible be configured to try multiple SSH keys?可以将 Ansible 配置为尝试多个 SSH 密钥吗?
【发布时间】:2021-05-13 02:21:46
【问题描述】:

我了解,当运行带有公钥身份验证的 SSH 命令时,客户端将尝试它知道的所有 SSH 密钥,直到主机接受一个 (https://security.stackexchange.com/questions/182804/how-does-ssh-know-which-public-key-to-use-from-authorized-keys)。

当使用 SSH 在主机上运行 Ansible 命令时,似乎没有此功能:Ansible 需要在 ansible.cfg 中明确指定 SSH 私钥文件:

private_key_file = /user/.ssh/id_rsa_mykey

在我的用例中,Ansible 在 Lando 上的 docker 容器中运行。所有 SSH 密钥都从用户的 ssh 配置目录导入到容器中的已知路径。但是,我不一定知道 Ansible 所需的名称,因为这是个人用户配置的内容。

有没有办法让 Ansible 发出的 SSH 命令尝试多个密钥,就像 SSH 设计的那样?

【问题讨论】:

    标签: ssh ansible


    【解决方案1】:

    Ansible 要求在 ansible.cfg 中明确指定 SSH 私钥文件:

    Ansible 要求您在 ansible.cfg 中提供私钥文件。由于ansible 只是调用ssh,因此配置连接凭据的首选位置是在您的~/.ssh/config 文件中。在那里,您可以配置多个特定于主机的密钥:

    Host host1
      IdentityFile ~/.ssh/key-for-host1
    
    Host host2
      IdentityFile ~/.ssh/key-for-host2
    

    或者您可以将其配置为按顺序尝试多个键:

    Host *.example.com
      IdentityFile ~/.ssh/maybe-this-one
      IdentityFile ~/.ssh/okay-how-about-this-instead
    

    当然ssh 将使用您的 ssh 代理中存在的任何密钥。

    【讨论】:

    • 谢谢@larsks。但是,如果我没有在ansible.cfg 中指定私钥文件,并且我也没有在~/.ssh/config 中指定IdentifyFile,那么单独发出一个ssh 命令(没有Ansible)将尝试@ 中的所有密钥987654331@ 直到找到一个有效的。这就是我想通过 Ansible 实现的目标。我不能按顺序尝试多个键,因为键可以命名为任何名称。这可能吗?
    • 我不相信ssh 会那样做。如果您在 ~/.ssh 中有任意名称的密钥,除非明确指示这样做,否则 ssh 不会发现和使用它们。您最好的选择可能只是将您想要的所有密钥加载到您的 ssh 代理中。
    猜你喜欢
    • 1970-01-01
    • 2014-11-29
    • 2016-05-01
    • 2017-03-21
    • 1970-01-01
    • 2017-11-26
    • 2016-08-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多