【问题标题】:How to add a host to the known_host file with ansible?如何使用 ansible 将主机添加到 known_host 文件?
【发布时间】:2020-07-10 12:00:51
【问题描述】:

我想使用 ansible 1.9.3 将我的私有 git 服务器的 ssh 密钥添加到 known_hosts 文件,但它不起作用。

我的剧本中有以下条目:

- name: add SSH host key
  known_hosts: name='myhost.com'
               key="{{ lookup('file', 'host_key.pub') }}"

我已将 /etc/ssh/ssh_host_rsa_key.pub 复制到 host_key.pub,文件如下所示:

ssh-rsa AAAAB3NzaC1... root@myhost.com

如果我运行我的剧本,我总是会收到以下错误消息:

TASK: [add SSH host key]
****************************************************** 
failed: [default] => {"cmd": "/usr/bin/ssh-keygen -F myhost.com -f /tmp/tmpe5KNIW", "failed": true, "rc": 1}

我做错了什么?

【问题讨论】:

  • 如果您手动运行命令ssh-keygen -v -F myhost.com -f /path/to/host_key.pub 会发生什么。这实际上与 Ansible 尝试调用的命令相同,因此它有望报告 Ansible 遇到的错误。确保以运行 playbook 的用户身份运行命令。

标签: ansible ansible-playbook


【解决方案1】:

您的远程主机公钥副本需要一个名称,该名称需要与您为已知主机指定的名称相匹配。

在您的情况下,将 "myhost.com " 添加到您的 host_key.pub 密钥文件中,如下所示:

myhost.com ssh-rsa AAAAB3NzaC1... root@myhost.com

参考: Ansible known_hosts module,特别是 name 参数

【讨论】:

    【解决方案2】:

    你可以在ansible任务中直接使用ssh-keyscan

    - name: Ensure servers are present in known_hosts file
      known_hosts:
        name: "{{ hostvars[item].ansible_host }}"
        state: present
        key: "{{ lookup('pipe', 'ssh-keyscan {{ hostvars[item].ansible_host }}') }}"
        hash_host: true
      with_items: "{{ groups.servers }}"
    

    在上面的片段中,我们遍历您清单中定义的“服务器”组中的所有主机,在它们上使用ssh-keyscan,使用pipe 读取结果并使用known_hosts 添加它。

    如果您只想添加一台主机,那就更简单了:

    - name: Ensure server is present in known_hosts file
      known_hosts:
        name: "myhost.com"
        state: present
        key: "{{ lookup('pipe', 'ssh-keyscan myhost.com') }}"
        hash_host: true
    

    是否需要hash_host 取决于您的系统。

    【讨论】:

    • 我使用了这个解决方案,但我将 IP 地址直接添加到了 with_items 部分。但是,对于某些 IP 地址,“添加主机时未指定密钥”错误会随机出现一些奇怪的问题。我不太明白为什么会这样。一个 ip 总是失败,而其他 ip 随机失败。
    【解决方案3】:

    使用 ssh-keyscan 生成 host_key.pub 是另一种方式。

    ssh-keyscan myhost.com > host_key.pub
    

    这个命令会生成这样的格式。

    $ ssh-keyscan github.com > github.com.pub
    # github.com SSH-2.0-libssh-0.7.0
    # github.com SSH-2.0-libssh-0.7.0
    
    $ cat github.com.pub 
    github.com ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ==
    

    【讨论】:

    • ssh-keyscan -t ecdsa-sha2-nistp256 myhost.com > test1.pub 更适合 known_hosts
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-22
    • 1970-01-01
    • 1970-01-01
    • 2019-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多