2.2. 管理対象ノードの準備
管理対象ノードはインベントリーにリストされているシステムであり、Playbook に従ってコントロールノードによって設定されます。管理対象ホストに Ansible をインストールする必要はありません。
前提条件
- コントロールノードを準備している。詳細は、RHEL 8 でのコントロールノードの準備 を参照してください。
コントロールノードから SSH アクセスできる。
重要rootユーザーとしての直接 SSH アクセスはセキュリティーリスクを引き起こします。このリスクを軽減するには、管理対象ノードを準備するときに、このノード上にローカルユーザーを作成し、sudoポリシーを設定します。続いて、コントロールノードの Ansible は、ローカルユーザーアカウントを使用して管理対象ノードにログインし、rootなどの別のユーザーとして Playbook を実行できます。
手順
ansibleという名前のユーザーを作成します。[root@managed-node-01]# useradd ansibleコントロールノードは後でこのユーザーを使用して、このホストへの SSH 接続を確立します。
ansibleユーザーのパスワードを設定します。[root@managed-node-01]# passwd ansible Changing password for user ansible. New password: <password> Retype new password: <password> passwd: all authentication tokens updated successfully.Ansible が
sudoを使用してrootユーザーとしてタスクを実行する場合は、このパスワードを入力する必要があります。ansibleユーザーの SSH 公開鍵を管理対象ノードにインストールします。ansibleユーザーとしてコントロールノードにログインし、SSH 公開鍵を管理対象ノードにコピーします。[ansible@control-node]$ ssh-copy-id managed-node-01.example.com /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/ansible/.ssh/id_rsa.pub" The authenticity of host 'managed-node-01.example.com (192.0.2.100)' can't be established. ECDSA key fingerprint is SHA256:9bZ33GJNODK3zbNhybokN/6Mq7hu3vpBXDrCxe7NAvo.プロンプトが表示されたら、
yesと入力して接続します。Are you sure you want to continue connecting (yes/no/[fingerprint])? yes /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keysプロンプトが表示されたら、パスワードを入力します。
ansible@managed-node-01.example.com's password: <password> Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'managed-node-01.example.com'" and check to make sure that only the key(s) you wanted were added.コントロールノードでコマンドをリモートで実行して、SSH 接続を確認します。
[ansible@control-node]$ ssh managed-node-01.example.com whoami ansible
ansibleユーザーのsudo設定を作成します。visudoコマンドを使用して、/etc/sudoers.d/ansibleファイルを作成および編集します。[root@managed-node-01]# visudo /etc/sudoers.d/ansible通常のエディターではなく
visudoを使用する利点は、このユーティリティーがファイルをインストールする前に解析エラーなどの基本的なチェックを提供する点にあります。/etc/sudoers.d/ansibleファイルで、要件に応じたsudoersポリシーを設定します。次に例を示します。ansibleユーザーのパスワードを入力した後、このホスト上で任意のユーザーおよびグループとしてすべてのコマンドを実行する権限をansibleユーザーに付与するには、以下を使用します。ansible ALL=(ALL) ALLansibleユーザーのパスワードを入力せずに、このホスト上で任意のユーザーおよびグループとしてすべてのコマンドを実行する権限をansibleユーザーに付与するには、以下を使用します。ansible ALL=(ALL) NOPASSWD: ALL
または、セキュリティー要件に合わせてより細かいポリシーを設定します。
sudoersポリシーの詳細は、sudoers(5)man ページを参照してください。
検証
すべての管理対象ノード上のコントロールノードからコマンドを実行できることを確認します。
[ansible@control-node]$ ansible all -m ping BECOME password: <password> managed-node-01.example.com | SUCCESS => { ... "ping": "pong" } ...ハードコーディングされたすべてのホストグループには、インベントリーファイルにリストされているすべてのホストが動的に含まれます。
Ansible
commandモジュールを使用して管理対象ノードでwhoamiユーティリティーを実行し、権限昇格が正しく機能することを確認します。[ansible@control-node]$ ansible all -m command -a whoami BECOME password: <password> managed-node-01.example.com | CHANGED | rc=0 >> root ...コマンドが root を返した場合、管理対象ノード上で
sudoが正しく設定されています。