11

/etc/ssh/sshd_config ファイルを編集するには、Ansible モジュールを使用する必要があります。新しいユーザーを作成するたびに、次の 2 行に追加します。

AllowUsers root osadmin <new_user>
AllowGroups root staff <new_group>

現時点では、シェル モジュールを使用して sed コマンドを実行していますが、できれば lineinfile を使用したいと考えています。

- shell: "sed -i '/^Allow/ s/$/ {{ user_name }}/' /etc/ssh/sshd_config"

どんな提案でも心から感謝します。

4

5 に答える 5

21

replace モジュールは、ファイル内の正規表現パターンのすべてのインスタンスを置き換えます。行に一致するタスクを作成AllowUsersし、ユーザー名が追加された元の行に置き換えます。タスクがべき等であることを確認するために、正規表現の否定先読みアサーションは、ユーザー名が行に既に表示されているかどうかを確認します。例えば:

- name: Add user to AllowUsers
  replace:
    backup: yes
    dest: /etc/ssh/sshd_config
    regexp: '^(AllowUsers(?!.*\b{{ user_name }}\b).*)$'
    replace: '\1 {{ user_name }}'
于 2015-07-16T22:57:24.943 に答える
1

私も同じ問題を抱えていました。ユーザーをsudoersグループに追加する必要がありました。行に「testuser」としましょう:

User_Alias SOMEADMIN = smoeuser1, someuser2, someuser3

これは私にとってはうまくいきました:

- name: add testuser to end of line
      lineinfile:
        dest: /etc/sudoers.d/somegroup
        state: present
        regexp: '^(User_Alias(.*)$)'
        backrefs: yes
        line: '\1, testuser'

ポイントは、正規表現に'^(User_Alias(. .)$)'* ではなく '^User_Alias ( . .)$'* がある場合、機能せず、行全体が置き換えられたことです。()の周りに検索されたテキストを使用すると、結果は OK でした:

User_Alias SOMEADMIN = smoeuser1, someuser2, someuser3, testuser

したがって、何でもインラインで機能します:、次のような ansible 変数が含まれています"{{ usernames | join(', ') }}"

于 2019-02-20T12:50:31.427 に答える