1.7. RHEL システムロールを使用した OpenSSH サーバーおよびクライアントの設定
sshd RHEL システムロールを使用すると、OpenSSH サーバーを設定できます。また、ssh RHEL システムロールを使用すると、OpenSSH クライアントを設定できます。この設定は、任意の数の RHEL システムで一貫して自動的かつ同時に行うことができます。このような設定は、次のようなセキュアなリモート操作が必要なシステムに必要です。
- リモートシステム管理: SSH クライアントを使用して別のコンピューターから自分のマシンにセキュアに接続します。
- セキュアなファイル転送: OpenSSH が提供する Secure File Transfer Protocol (SFTP) を使用すると、ローカルマシンとリモートシステム間でファイルをセキュアに転送できます。
- 自動化された DevOps パイプライン: リモートサーバーへのセキュアな接続を必要とするソフトウェアのデプロイを自動化します (CI/CD パイプライン)。
- トンネリングとポート転送: ファイアウォールの背後にあるリモートサーバー上の Web サービスにアクセスするためにローカルポートを転送します。たとえば、リモートデータベースや開発サーバーなどです。
- 鍵ベースの認証: パスワードベースのログインよりもセキュアな代替手段です。
- 証明書ベースの認証: 一元的な信頼管理とスケーラビリティーの向上を実現します。
- セキュリティーの強化: root ログインの無効化、ユーザーアクセスの制限、強力な暗号化の適用などの強化策により、システムセキュリティーが強化されます。
1.7.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 ::
1.7.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: redhat.rhel_system_roles.sshd vars: sshd_config: 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 yes192.0.2.0/24サブネットから root としてサーバーに接続できることを確認します。IP アドレスを確認します。
$ hostname -I 192.0.2.1IP アドレスが
192.0.2.1-192.0.2.254範囲にある場合は、サーバーに接続できます。rootでサーバーに接続します。$ ssh root@<ssh_server>
1.7.3. 非排他的設定に 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: redhat.rhel_system_roles.sshd vars: sshd_config_namespace: <my_application> sshd_config: # Environment variables to accept AcceptEnv: LANG LS_COLORS EDITORRHEL 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: redhat.rhel_system_roles.sshd vars: sshd_config_file: /etc/ssh/sshd_config.d/<42-my_application>.conf sshd_config: # 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
1.7.4. sshd RHEL システムロールを使用して SSH サーバー上のシステム全体の暗号化ポリシーをオーバーライドする リンクのコピーリンクがクリップボードにコピーされました!
デフォルトの暗号化設定が特定のセキュリティーまたは互換性のニーズに合わない場合は、sshd RHEL システムロールを使用して、OpenSSH サーバー上のシステム全体の暗号化ポリシーをオーバーライドすることができます。特に次のような主な状況では、オーバーライドすることを推奨します。
- 古いクライアントとの互換性: デフォルトよりも弱い暗号化アルゴリズム、鍵交換プロトコル、または暗号を使用する必要がある場合。
- より強力なセキュリティーポリシーの適用: 同時に、より弱いアルゴリズムを無効にすることもできます。このような対策は、特に高度にセキュアで規制された環境では、デフォルトのシステム暗号化ポリシーの範囲を超えたものになることがあります。
- パフォーマンスに関する考慮事項: システムのデフォルト設定により適用される強力なアルゴリズムにより、一部のシステムでは計算負荷が大きくなる可能性があります。
- 特定のセキュリティーニーズに合わせたカスタマイズ: デフォルトの暗号化ポリシーでは対応できない固有の要件に合わせる場合。
sshd RHEL システムロールで、暗号化ポリシーのすべての要素をオーバーライドすることはできません。たとえば、別のレイヤーで SHA-1 署名が禁止されている場合があります。より一般的な解決策は、RHEL システムロールを使用したカスタム暗号化ポリシーの設定 を参照してください。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo権限がある。
手順
次の内容を含む Playbook ファイル (例:
~/playbook.yml) を作成します。- name: Deploy SSH configuration for OpenSSH server hosts: managed-node-01.example.com tasks: - name: Overriding the system-wide cryptographic policy ansible.builtin.include_role: name: redhat.rhel_system_roles.sshd vars: sshd_sysconfig: true sshd_sysconfig_override_crypto_policy: true sshd_KexAlgorithms: ecdh-sha2-nistp521 sshd_Ciphers: aes256-ctr sshd_MACs: hmac-sha2-512-etm@openssh.com sshd_HostKeyAlgorithms: rsa-sha2-512,rsa-sha2-256サンプル Playbook で指定されている設定は次のとおりです。
sshd_KexAlgorithms-
たとえば、
ecdh-sha2-nistp256、ecdh-sha2-nistp384、ecdh-sha2-nistp521、diffie-hellman-group14-sha1、またはdiffie-hellman-group-exchange-sha256などの鍵交換アルゴリズムを選択できます。 sshd_Ciphers-
たとえば、
aes128-ctr、aes192-ctr、またはaes256-ctrなどの暗号を選択できます。 sshd_MACs-
たとえば、
hmac-sha2-256、hmac-sha2-512、またはhmac-sha1などの MAC を選択できます。 sshd_HostKeyAlgorithms-
ecdsa-sha2-nistp256、ecdsa-sha2-nistp384、ecdsa-sha2-nistp521、ssh-rsaなどの公開鍵アルゴリズムを選択できます。
Playbook で使用されるすべての変数の詳細は、コントロールノード上の
/usr/share/ansible/roles/rhel-system-roles.sshd/README.mdファイルを参照してください。注記RHEL 9 管理対象ノードでは、システムロールによって設定が
/etc/ssh/sshd_config.d/00-ansible_system_role.confファイルに書き込まれ、暗号化オプションが自動的に適用されます。sshd_config_file変数を使用してファイルを変更できます。ただし、設定を確実に有効にするために、設定された暗号化ポリシーが含まれる/etc/ssh/sshd_config.d/50-redhat.confファイルよりも辞書式順序で前に来るようなファイル名を使用してください。RHEL 8 管理対象ノードでは、
sshd_sysconfig_override_crypto_policy変数とsshd_sysconfig変数をtrueに設定してオーバーライドを有効にする必要があります。Playbook の構文を検証します。
$ ansible-playbook --syntax-check ~/playbook.ymlこのコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
$ ansible-playbook ~/playbook.yml
検証
詳細なログを表示する SSH 接続を使用して手順が成功したかどうかを検証し、定義した変数を以下の出力で確認できます。
$ ssh -vvv <ssh_server> ... debug2: peer server KEXINIT proposal debug2: KEX algorithms: ecdh-sha2-nistp521 debug2: host key algorithms: rsa-sha2-512,rsa-sha2-256 debug2: ciphers ctos: aes256-ctr debug2: ciphers stoc: aes256-ctr debug2: MACs ctos: hmac-sha2-512-etm@openssh.com debug2: MACs stoc: hmac-sha2-512-etm@openssh.com ...
1.7.5. 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
設定オプションでは、大文字と小文字が区別されます。
1.7.6. 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: redhat.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