我想将我的私有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}
我做错了什么?
答案 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
取决于您的系统。