web-dev-qa-db-ja.com

ansibleを使用してユーザーの公開鍵を1人のユーザーのauthorized_keysファイルに追加する

2人の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になります。当然のことながら、私はアイデアがありません。誰でも?

3

わかりました、私はあなたのプレイブックにいくつかの微調整を加えました、そしてこれは改訂版です

---
- 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モジュールでは、インターネットの問題または404 Not found(tmessinsのキーなど)のいずれかのcurlタスクがフェッチに失敗したときにPlaybookの実行を再開するようにignore_errors: yesを定義しました。もちろん 失敗の定義を制御する で微調整することができるので、他のエラーが発生しても失敗します。
6
masegaloeh

Ansible 1.9以降では、keyの値をURLにすることができ、Shellモジュールを介してURLを丸める必要がなくなります。

例:

- name: Add my SSH key
  authorized_key: user=jeffwidman key=https://github.com/jeffwidman.keys
6
Jeff Widman

今では本当に簡単です:

- name: get github key(s) and update the authorized_keys file
  authorized_key:
    user: "{{ username }}"
    key: "https://github.com/{{ username }}.keys"

詳細については、このgithubを確認してください role

0
arbabnazar