1.8. ssh システムロールを使用したセキュアな通信の設定
管理者は、Ansible Core パッケージを使用すると、sshd
システムロールを使用して SSH サーバーを設定できます。また、ssh
システムロールを使用して任意の数の RHEL システムで SSH クライアントを一貫して同時に設定できます。
1.8.1. sshd
RHEL システムロールによって Playbook の設定を設定ファイルにマッピングする方法
sshd
RHEL システムロール Playbook では、サーバー SSH 設定ファイルのパラメーターを定義できます。
これらの設定を指定しない場合、RHEL のデフォルトに一致する sshd_config
ファイルがロールによって生成されます。
いずれの場合も、ブール値は、管理対象ノードの最終設定で、yes
および no
として適切にレンダリングされます。リストを使用して複数行の設定項目を定義できます。以下に例を示します。
sshd_ListenAddress: - 0.0.0.0 - '::'
レンダリングは以下のようになります。
ListenAddress 0.0.0.0 ListenAddress ::
関連情報
-
/usr/share/ansible/roles/rhel-system-roles.sshd/README.md
ファイル -
/usr/share/doc/rhel-system-roles/sshd/
ディレクトリー
1.8.2. sshd
RHEL システムロールを使用した OpenSSH サーバーの設定
sshd
RHEL システムロールを使用して、複数の OpenSSH サーバーを設定できます。OpenSSH サーバーは、主に次の機能により、リモートユーザーにセキュアな通信環境を提供します。
- リモートクライアントからの SSH 接続の管理
- 認証情報の検証
- セキュアなデータ転送とコマンド実行
sshd
RHEL システムロールは、Identity Management RHEL システムロールなど、SSHD 設定を変更する他の RHEL システムロールと併用できます。設定が上書きされないように、sshd
RHEL システムロールが名前空間 (RHEL 8 以前のバージョン) またはドロップインディレクトリー (RHEL 9) を使用することを確認してください。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo
権限がある。
手順
次の内容を含む Playbook ファイル (例:
~/playbook.yml
) を作成します。--- - name: SSH server configuration hosts: managed-node-01.example.com tasks: - name: Configure sshd to prevent root and password login except from particular subnet ansible.builtin.include_role: name: rhel-system-roles.sshd vars: sshd: PermitRootLogin: no PasswordAuthentication: no Match: - Condition: "Address 192.0.2.0/24" PermitRootLogin: yes PasswordAuthentication: yes
サンプル Playbook で指定されている設定は次のとおりです。
PasswordAuthentication: yes|no
-
ユーザー名とパスワードの組み合わせを使用するクライアントからの認証を OpenSSH サーバー (
sshd
) が受け入れるかどうかを制御します。 Match:
-
Match ブロックで、サブネット
192.0.2.0/24
からのパスワードを使用したroot
ユーザーログインだけを許可しています。
Playbook で使用されるロール変数と OpenSSH 設定オプションの詳細は、
/usr/share/ansible/roles/rhel-system-roles.sshd/README.md
ファイルと、コントロールノードのsshd_config(5)
man ページを参照してください。Playbook の構文を検証します。
$ ansible-playbook --syntax-check ~/playbook.yml
このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
$ ansible-playbook ~/playbook.yml
検証
SSH サーバーにログインします。
$ ssh <username>@<ssh_server>
SSH サーバー上の
sshd_config
ファイルの内容を確認します。$ cat /etc/ssh/sshd_config.d/00-ansible_system_role.conf # # Ansible managed # PasswordAuthentication no PermitRootLogin no Match Address 192.0.2.0/24 PasswordAuthentication yes PermitRootLogin yes
192.0.2.0/24
サブネットから root としてサーバーに接続できることを確認します。IP アドレスを確認します。
$ hostname -I 192.0.2.1
IP アドレスが
192.0.2.1
-192.0.2.254
範囲にある場合は、サーバーに接続できます。root
でサーバーに接続します。$ ssh root@<ssh_server>
関連情報
-
/usr/share/ansible/roles/rhel-system-roles.sshd/README.md
ファイル -
/usr/share/doc/rhel-system-roles/sshd/
ディレクトリー
1.8.3. ssh
RHEL システムロールによって Playbook の設定を設定ファイルにマッピングする方法
ssh
RHEL システムロール Playbook では、クライアント SSH 設定ファイルのパラメーターを定義できます。
これらの設定を指定しない場合、RHEL のデフォルトに一致するグローバルの ssh_config
ファイルがロールによって生成されます。
いずれの場合も、ブール値は、管理対象ノードの最終設定で、yes
または no
として適切にレンダリングされます。リストを使用して複数行の設定項目を定義できます。以下に例を示します。
LocalForward: - 22 localhost:2222 - 403 localhost:4003
レンダリングは以下のようになります。
LocalForward 22 localhost:2222 LocalForward 403 localhost:4003
設定オプションでは、大文字と小文字が区別されます。
関連情報
-
/usr/share/ansible/roles/rhel-system-roles.ssh/README.md
ファイル -
/usr/share/doc/rhel-system-roles/ssh/
ディレクトリー
1.8.4. ssh
RHEL システムロールを使用した OpenSSH クライアントの設定
ssh
RHEL システムロールを使用して、複数の OpenSSH クライアントを設定できます。OpenSSH クライアントは、以下を提供することで、ローカルユーザーがリモート OpenSSH サーバーとのセキュアな接続を確立することを可能にします。
- セキュアな接続の開始
- 認証情報のプロビジョニング
- セキュアな通信チャネルに使用される暗号化方式に関する OpenSSH サーバーとのネゴシエーション
- OpenSSH サーバーとの間でセキュアにファイルを送受信する機能
ssh
RHEL システムロールは、Identity Management RHEL システムロールなど、SSH 設定を変更する他のシステムロールと併用できます。設定が上書きされないように、ssh
RHEL システムロールがドロップインディレクトリーを使用すること (RHEL 8 以降ではデフォルト) を確認してください。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo
権限がある。
手順
次の内容を含む Playbook ファイル (例:
~/playbook.yml
) を作成します。--- - name: SSH client configuration hosts: managed-node-01.example.com tasks: - name: Configure ssh clients ansible.builtin.include_role: name: rhel-system-roles.ssh vars: ssh_user: root ssh: Compression: true GSSAPIAuthentication: no ControlMaster: auto ControlPath: ~/.ssh/.cm%C Host: - Condition: example Hostname: server.example.com User: user1 ssh_ForwardX11: no
サンプル Playbook で指定されている設定は次のとおりです。
ssh_user: root
-
特定の設定の詳細を使用して、管理対象ノード上の
root
ユーザーの SSH クライアント設定を指定します。 Compression: true
- 圧縮が有効になります。
ControlMaster: auto
-
ControlMaster の多重化が
auto
に設定されます。 Host
-
user1
というユーザーとしてserver.example.com
ホストに接続するためのエイリアスexample
を作成します。 ssh_ForwardX11: no
- X11 転送が無効になります。
Playbook で使用されるロール変数と OpenSSH 設定オプションの詳細は、
/usr/share/ansible/roles/rhel-system-roles.ssh/README.md
ファイルと、コントロールノードのssh_config(5)
man ページを参照してください。Playbook の構文を検証します。
$ ansible-playbook --syntax-check ~/playbook.yml
このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
$ ansible-playbook ~/playbook.yml
検証
SSH 設定ファイルを表示して、管理対象ノードの設定が正しいことを確認します。
# cat ~/root/.ssh/config # Ansible managed Compression yes ControlMaster auto ControlPath ~/.ssh/.cm%C ForwardX11 no GSSAPIAuthentication no Host example Hostname example.com User user1
関連情報
-
/usr/share/ansible/roles/rhel-system-roles.ssh/README.md
ファイル -
/usr/share/doc/rhel-system-roles/ssh/
ディレクトリー -
ssh_config(5)
man ページ
1.8.5. 非排他的設定に sshd
RHEL システムロールを使用する
デフォルトでは、sshd
RHEL システムロールを適用すると、設定全体が上書きされます。これは、たとえば別の RHEL システムロールや Playbook などを使用して、以前に設定を調整している場合に問題を生じる可能性があります。他のオプションを維持しながら、選択した設定オプションにのみ sshd
に問題を生じるシステムロールを適用するには、非排他的設定を使用できます。
非排他的設定は、以下を使用して適用できます。
- RHEL 8 以前では、設定スニペットを使用します。
-
RHEL 9 以降では、ドロップインディレクトリー内のファイルを使用します。デフォルトの設定ファイルは、
/etc/ssh/sshd_config.d/00-ansible_system_role.conf
としてドロップインディレクトリーにすでに配置されています。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo
権限がある。
手順
次の内容を含む Playbook ファイル (例:
~/playbook.yml
) を作成します。RHEL 8 以前を実行する管理対象ノードの場合:
--- - name: Non-exclusive sshd configuration hosts: managed-node-01.example.com tasks: - name: Configure SSHD to accept environment variables ansible.builtin.include_role: name: rhel-system-roles.sshd vars: sshd_config_namespace: <my-application> sshd: # Environment variables to accept AcceptEnv: LANG LS_COLORS EDITOR
RHEL 9 以降を実行する管理対象ノードの場合:
- name: Non-exclusive sshd configuration hosts: managed-node-01.example.com tasks: - name: Configure sshd to accept environment variables ansible.builtin.include_role: name: rhel-system-roles.sshd vars: sshd_config_file: /etc/ssh/sshd_config.d/<42-my-application>.conf sshd: # Environment variables to accept AcceptEnv: LANG LS_COLORS EDITOR
サンプル Playbook で指定されている設定は次のとおりです。
sshd_config_namespace: <my-application>
- このロールは、Playbook で指定した設定を、特定の名前空間配下にある既存の設定ファイルの設定スニペットに配置します。異なるコンテキストからロールを実行する場合は、異なる名前空間を選択する必要があります。
sshd_config_file: /etc/ssh/sshd_config.d/<42-my-application>.conf
-
sshd_config_file
変数では、sshd
システムロールによる設定オプションの書き込み先の.conf
ファイルを定義します。設定ファイルが適用される順序を指定するには、2 桁の接頭辞 (例:42-
) を使用します。 AcceptEnv:
OpenSSH サーバー (
sshd
) がクライアントから受け入れる環境変数を制御します。-
LANG
: 言語とロケールの設定を定義します。 -
LS_COLORS
: ターミナルのls
コマンドの表示カラースキームを定義します。 -
EDITOR
: エディターを開く必要があるコマンドラインプログラムのデフォルトのテキストエディターを指定します。
-
Playbook で使用されるロール変数と OpenSSH 設定オプションの詳細は、
/usr/share/ansible/roles/rhel-system-roles.sshd/README.md
ファイルと、コントロールノードのsshd_config(5)
man ページを参照してください。
Playbook の構文を検証します。
$ ansible-playbook --syntax-check ~/playbook.yml
このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
$ ansible-playbook ~/playbook.yml
検証
SSH サーバーの設定を確認します。
RHEL 8 以前を実行する管理対象ノードの場合:
# cat /etc/ssh/sshd_config ... # BEGIN sshd system role managed block: namespace <my-application> Match all AcceptEnv LANG LS_COLORS EDITOR # END sshd system role managed block: namespace <my-application>
RHEL 9 以降を実行する管理対象ノードの場合:
# cat /etc/ssh/sshd_config.d/42-my-application.conf # Ansible managed # AcceptEnv LANG LS_COLORS EDITOR
関連情報
-
/usr/share/ansible/roles/rhel-system-roles.sshd/README.md
ファイル -
/usr/share/doc/rhel-system-roles/sshd/
ディレクトリー -
sshd_config(5)
man ページ