「#」文字の後に 0 個以上の空白が必要な場合は、次のようにすれば十分です:
- name: Uncomment line from /etc/ssh/sshd_config
lineinfile:
dest: /etc/ssh/sshd_config
regexp: '^#\s*AuthorizedKeysFile.*$'
line: 'AuthorizedKeysFile .ssh/authorized_keys'
元のコードへの変更は \s*
の追加です そして .*$
説明:
\s
- 空白 (スペース、タブ、改行、フォーム フィード) に一致
*
- その式が左にあることを指定します (\s
) は、一致で 0 個以上のインスタンスを持つことができます
.*
- ゼロ個以上の任意の文字に一致
$
- 行末に一致
まず、あなたは間違った言語を使用しています。 Ansible では、何をすべきかを指示するのではなく、目的の状態を定義します。したがって、Uncomment line form /etc/ssh/sshd_config
であってはなりません。 、しかし Ensure AuthorizedKeysFile is set to .ssh/authorized_keys
.
第二に、初期状態が何であるかは問題ではありません (行がコメントされているかどうか)。行を識別する一意の文字列を 1 つ指定する必要があります。
sshd_config
で これは AuthorizedKeysFile
として可能です ディレクティブは、ファイル内で 1 回だけ発生します。他の構成ファイルでは、これはより困難になる可能性があります。
- name: Ensure AuthorizedKeysFile is set to .ssh/authorized_keys
lineinfile:
dest: /etc/ssh/sshd_config
regexp: AuthorizedKeysFile
line: 'AuthorizedKeysFile .ssh/authorized_keys'
AuthorizedKeysFile
を含む行と一致します 文字列 (コメント化されているかどうか、またはスペースの数に関係なく) を入力し、行全体が次のようになっていることを確認します:
AuthorizedKeysFile .ssh/authorized_keys
行が異なる場合、Ansible は「変更された」状態を報告します。
2 回目の実行で、Ansible は AuthorizedKeysFile
を見つけます。 再び、ラインがすでに目的の状態にあることを発見したため、「ok」状態でタスクを終了します。
上記のタスクに関する 1 つの注意点は、いずれかの行に実際の意図的なコメントなどのコメントが含まれている場合です (たとえば、文字列 AuthorizedKeysFile
を含む英語の説明)。 )、Ansible はその行を line
で指定された値に置き換えます。 .