尝试将两个人的 Github 公钥添加到用户的授权用户文件中。我能够成功检索 SSH 密钥:
---
- hosts: 127.0.0.1
connection: local
vars:
my_users:
belminf: "belminf"
bob: "tmessins"
tasks:
- name: Retrieving all keys from GitHub
shell: /usr/bin/curl https://github.com/{{ item.value }}.keys 2> /dev/null
register: ssh_keys
with_dict: my_users
- debug: var=ssh_keys
但是,我不确定如何循环结果ssh_keys
并使用authorized_keys
任务来添加检索到的键。
我的可笑尝试:
- name: Adding keys to authorized_keys
authorized_key: user=belminf key="{{ item }}" path=/home/belminf/test_auth state=present
with_items: ssh_keys.results
结果是invalid key specified
。这可以理解,但我没有主意。有人知道吗?
答案1
好的,我对你的剧本做了一些调整,这是修改后的版本
---
- hosts: 127.0.0.1
connection: local
vars:
my_users:
belminf: "belminf"
bob: "tmessins"
tasks:
- name: Retrieving all keys from GitHub
shell: /usr/bin/curl https://github.com/{{ item.value }}.keys 2> /dev/null
register: ssh_keys
with_dict: my_users
- name: Adding keys to authorized_keys
authorized_key: user=belminf key="{{ item.stdout }}" path=/home/belminf/test_auth state=present
with_items: ssh_keys.results
ignore_errors: yes
一些变化请注意:
- 在
authorized_key
模块上,密钥已更改为item.stdout
。stdout 是您需要的公钥。 - 在
authorized_key
模块中,我定义了ignore_errors: yes
每当你的 curl 任务无法获取时恢复 playbook 执行,无论是网络问题还是 404 Not found(如 tmessins 的密钥)。当然,你可以通过以下方式进行调整:控制失败的定义因此当发生其他错误时它仍然失败。
答案2
从 Ansible 1.9 开始,的值key
可以是 url,从而无需通过shell
模块卷曲 url。
例子:
- name: Add my SSH key
authorized_key: user=jeffwidman key=https://github.com/jeffwidman.keys
答案3
现在非常简单:
- name: get github key(s) and update the authorized_keys file
authorized_key:
user: "{{ username }}"
key: "https://github.com/{{ username }}.keys"
有关详细信息,请查看此 github角色