新しい従業員が参加し、テストサーバーへのアクセスを許可する必要があります。通常、私はテンプレートを使用し、環境の種類に応じてこのテンプレートをサーバーにアップロードします。しかし、今回は別のアプローチを使用したいと思います。ユーザーが利用できない場合にのみsshd_config
新しいユーザーを追加したいと思います。AllowUsers
モジュールを試しましたが、lineinfile
これまで成功しませんでした。
ベストアンサー1
フィルタの使用コミュニティ、一般.jc分析する/etc/ssh/sshd_config
変数宣言
sshd_conf: "{{ sshd_out.stdout|community.general.jc('sshd_conf') }}"
そしてファイルを読む
- command: cat /etc/ssh/sshd_config
register: sshd_out
構成済みリストのインポートユーザーを許可
sshd_allow_users: "{{ sshd_conf.allowusers|d('')|split }}"
他のモジュールを使用してファイルを読み取ることもできます(slurp、fetchなど)。フィルタを使用するにはインストールする必要があります。提示コントローラから。インストールできない場合やインストールしたくない場合は、設定を自分で解決してください。コマンドの使用
- command: sshd -T
register: sshd_out
そして変数宣言
sshd_allow_users: "{{ sshd_out.stdout_lines|
select('match', 'allowusers')|
map('split')|map('last') }}"
リストを追加して接続するユーザーのリストを宣言します。
sshd_allow_users_add: [alice, bob]
sshd_conf_update:
AllowUsers: "{{ (sshd_allow_users + sshd_allow_users_add)|flatten|unique|sort }}"
たとえば、与えられたファイル
shell> grep AllowUsers /etc/ssh/sshd_config
AllowUsers cloe
更新
- lineinfile:
path: /etc/ssh/sshd_config
firstmatch: true
regexp: '^\s*{{ item.key }}\s+(.*)$'
line: "{{ item.key }} {{ item.value|join(' ') }}"
validate: sshd -t -f %s
loop: "{{ sshd_conf_update|dict2items }}"
譲歩--OK--違いモデル
TASK [lineinfile] ********************************************************************
--- before: /etc/ssh/sshd_config (content)
+++ after: /etc/ssh/sshd_config (content)
@@ -127,4 +127,4 @@
# AllowTcpForwarding no
# PermitTTY no
# ForceCommand cvs server
-AllowUsers cloe
+AllowUsers alice bob cloe
changed: [localhost] => (item={'key': 'AllowUsers', 'value': ['alice', 'bob', 'cloe']})
テストのための完全なプレイブックの例
- hosts: all
become: true
vars:
sshd_allow_users_add: [alice, bob]
sshd_conf_update:
AllowUsers: "{{ (sshd_allow_users + sshd_allow_users_add)|flatten|unique|sort }}"
sshd_conf: "{{ sshd_out.stdout|community.general.jc('sshd_conf') }}"
sshd_allow_users: "{{ sshd_conf.allowusers|d('')|split }}"
tasks:
- command: cat /etc/ssh/sshd_config
register: sshd_out
check_mode: false
changed_when: false
- debug:
msg: |
sshd_conf:
{{ sshd_conf|to_yaml|indent(2) }}
sshd_allow_users_add: {{ sshd_allow_users_add }}
sshd_conf_update:
{{ sshd_conf_update|to_yaml|indent(2) }}
when: debug|d(false)|bool
- lineinfile:
path: /etc/ssh/sshd_config
firstmatch: true
regexp: '^\s*{{ item.key }}\s+(.*)$'
line: "{{ item.key }} {{ item.value|join(' ') }}"
validate: sshd -t -f %s
loop: "{{ sshd_conf_update|dict2items }}"
尋ねる:「分割」というフィルタはありません。
答え:フィルタ分ける2.11から利用可能です。このフィルタが利用できない場合は、この方法を使用してください。分かれる()最初のケース
sshd_allow_users: "{{ (sshd_conf.allowusers|d('')).split() }}"
そしてフィルターを使う正規表現_交換2番目のケース
sshd_allow_users: "{{ sshd_out.stdout_lines|
select('match', 'allowusers')|
map('regex_replace', '^(.*) (.*)$', '\\2') }}"