如何使用ansible将主机添加到known_host文件?

时间:2015-11-08 11:39:14

标签: ansible ansible-playbook

我想将我的私有git服务器的ssh密钥添加到带有ansible 1.9.3的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}

我做错了什么?

3 个答案:

答案 0 :(得分:6)

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

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

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

参考: Ansible known_hosts module,特别是名称参数

答案 1 :(得分: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==

答案 2 :(得分:1)

您可以在该任务中直接使用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读取结果,然后使用{{1}添加它}。

如果您只想添加一个主机,则更加简单:

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 取决于您的系统。