18

私はAnsibleの使用にかなり慣れていないので、こことグーグルを読んでいて、まだ答えが見つかりません.

私のシナリオでは、サーバーに 1 人のユーザーがいますが、authorized_keys ファイルに入れる必要がある 2 ~ 3 個の異なる公開鍵があります。

このスクリプトを使用して、すべてのキーを正常に削除したり、すべてのキーを追加したりできます。

---
  - hosts: all

 tasks:
  - name: update SSH keys
    authorized_key:
     user: <user>
     key: "{{ lookup('file', item) }}"
     state: present
     #exclusive: yes
    with_fileglob:
      - ../files/pub_keys/*.pub

presentフラグを使用して、すべてのキーを読み取り、追加します。フラグを使用すると、absentリストされているすべてのキーが削除されます。

問題は、サーバー上にのみある古いキーがあり、それを削除/上書きし、将来の展開のために、プレイブックではなくサーバー上にある可能性のある未承認のキーを上書きすることです。

exclusiveフラグを使用すると、最後のキーのみを取得して追加します。ループして再帰的にすべてのキーを追加する場合、これは素晴らしいことです。Ansible でこれを行う方法がある場合、私はそれを見つけていません。

pub ファイルをループしexclusive、同時にオプションを使用する方法はありますか?

4

5 に答える 5

19

pub ファイルをループし、排他的オプションを同時に使用する方法はありますか?

いいえ。 docsにループと排他に関するメモがあります。

排他的:他のすべての指定されていないキーをauthorized_keysファイルから削除するかどうか。複数のキーを改行で区切ることにより、単一のキー文字列値に複数のキーを指定できます。このオプションはループに対応していないため、 with_ を使用すると、ループの反復ごとに排他的になります。ファイルに複数のキーが必要な場合は、上記のように単一のバッチでそれらすべてをキーに渡す必要があります。

そのため、すべてのキーを結合して一度に送信する必要があります。
このようなもの:

- name: update SSH keys
  authorized_key:
    user: <user>
    key: "{{ lookup('pipe','cat ../files/pub_keys/*.pub') }}"
    state: present
    exclusive: yes

本番環境で実行する前に、このコードを確認してください!

于 2016-08-10T17:19:52.660 に答える
4

ユーザーを変数内に保持する場合は、これを使用できます。

---

- hosts: all
  vars_files:
    - roles/users/vars/main.yml
  tasks:
    - name: Allow other users to login to the account
      authorized_key:
        user: user_name
        exclusive: yes
        key: "{{ developers|map(attribute='publish_ssh_key')|join('\n') }}"

は次のroles/users/vars/main.ymlようになります。

---

developers:
  - name: user1
    publish_ssh_key: ssh-rsa AAAA...
  - name: user2
    publish_ssh_key: ssh-rsa AAAA...
于 2016-10-26T14:54:02.653 に答える