2017-11-02 6 views
0

Ansibleを使用することにより、私たちのサーバの.ssh/authorized_keysファイルに所定のsshキーが含まれていることを確認します。配置に関係なく。Ansible:ファイルに特定の行だけが含まれているかどうかを確認してください。

  1. 1が欠落している場合は、それを追加します(問題なし、lineinfile
  2. 他の誰かが(「with_items」リストに含まれていない)余分なキー、それを削除し、いくつかの警告を返すに潜入した場合または何か。まあ... "変更された"も受け入れられるかもしれませんが、どういうわけか "欠けている"と "潜入した"行を区別するといいでしょう。

    - name: Ensure ssh authorized_keys contains the right users 
        lineinfile: 
        path: /root/.ssh/authorized_keys 
        owner: root 
        group: root 
        mode: 0600 
        state: present 
        line: '{{ item }}' 
    
        with_items: 
        - ssh-rsa AABBCC112233... [email protected] 
        - ssh-rsa DDEEFF112233... [email protected] 
    

    しかし、第二部では、よりトリッキーになります

最初の部分は簡単です。少なくとも、短くて洗練されたコードでそれを達成するために。

アイデア?

+0

lineinfileさんはあなたの友人ではありません。 – tedder42

+0

ソースファイルで常にターゲットを上書きするだけではないのですか? –

+0

@NeilMcGuigan:うまくいくかもしれませんが、鍵がないか、余分な鍵があるかどうかはわかりません。 –

答えて

2

authorized_key_moduleがあり、それにはexclusiveオプションがあります。
exclusivewith_itemsとは機能しません。

使用このような何か:使用前

- name: Ensure ssh authorized_keys contains the right users 
    authorized_key: 
    user: root 
    state: present 
    exclusive: yes 
    key: '{{ ssh_keys | join("\n") }}' 
    vars: 
    ssh_keys: 
     - ssh-rsa AABBCC112233... [email protected] 
     - ssh-rsa DDEEFF112233... [email protected]   

テストを!

ファイルにキーがある場合、thisの回答が役に立ちます。

+0

うわー!それは素晴らしいです!しかし、どのようにssh_keys変数を定義しますか?私は複数行の文字列で試してみましたが、それを改行で文字に分割しています... "with_file"オプションでキーファイルを使用するのと同じでしょうか? –

+0

申し訳ありません、定義するのを忘れてしまいました。また、ファイルにキーがある場合、私は他の答えへのリンクを追加しました。 –

+0

ありがとう!それはまさに私が望んでいたものです。 –

関連する問題