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) を使用することを確認してください。

前提条件

手順

  1. 次の内容を含む 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 ページを参照してください。

  2. Playbook の構文を検証します。

    $ ansible-playbook --syntax-check ~/playbook.yml

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  3. Playbook を実行します。

    $ ansible-playbook ~/playbook.yml

検証

  1. SSH サーバーにログインします。

    $ ssh <username>@<ssh_server>
  2. 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
  3. 192.0.2.0/24 サブネットから root としてサーバーに接続できることを確認します。

    1. IP アドレスを確認します。

      $ hostname -I
      192.0.2.1

      IP アドレスが 192.0.2.1 - 192.0.2.254 範囲にある場合は、サーバーに接続できます。

    2. 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 以降ではデフォルト) を確認してください。

前提条件

手順

  1. 次の内容を含む 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 ページを参照してください。

  2. Playbook の構文を検証します。

    $ ansible-playbook --syntax-check ~/playbook.yml

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  3. 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 としてドロップインディレクトリーにすでに配置されています。

前提条件

手順

  1. 次の内容を含む 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 ページを参照してください。

  2. Playbook の構文を検証します。

    $ ansible-playbook --syntax-check ~/playbook.yml

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  3. 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 ページ
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.