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

use*_*757 3 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') }}"
Run Code Online (Sandbox Code Playgroud)

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

ssh-rsa AAAAB3NzaC1... root@myhost.com
Run Code Online (Sandbox Code Playgroud)

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

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

我做错了什么?

leo*_*osh 11

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

- 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 }}"
Run Code Online (Sandbox Code Playgroud)

在上面的片段中,我们迭代清单中定义的“服务器”组中的所有主机,使用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
Run Code Online (Sandbox Code Playgroud)

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


Mik*_*e D 6

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

在您的情况下,"myhost.com "请按如下方式添加到host_key.pub密钥文件:

myhost.com ssh-rsa AAAAB3NzaC1... root@myhost.com
Run Code Online (Sandbox Code Playgroud)

参考: Ansible known_hosts模块,特别是name参数