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取决于您的系统。
您的远程主机公钥副本需要一个名称,该名称需要与您为已知主机指定的名称相匹配.
在您的情况下,"myhost.com "请按如下方式添加到host_key.pub密钥文件:
myhost.com ssh-rsa AAAAB3NzaC1... root@myhost.com
Run Code Online (Sandbox Code Playgroud)
参考: Ansible known_hosts模块,特别是name参数