使用 ansible 将用户的公钥添加到一个用户的 authorized_keys 文件中

使用 ansible 将用户的公钥添加到一个用户的 authorized_keys 文件中

尝试将两个人的 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角色

相关内容