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) ALL
ansible
ユーザーのパスワードを入力せずに、このホスト上で任意のユーザーおよびグループとしてすべてのコマンドを実行する権限を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 => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python3" }, "changed": false, "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
が正しく設定されています。
関連情報
- RHEL 8 でのコントロールノードの準備
-
sudoers(5)
man ページ