前回の記事にて、Ansibleコントロールノードを構築手順を記載した。今までと、これから執筆予定のAnsible関連記事は以下となる。
- AnsibleコントロールノードをAlmaLinux上に構築する
- AnsibleからLinuxサーバに接続するための事前作業 ←★本記事
- AnsibleでLinuxサーバの初期設定と単体テストを行う
- Ansibleのベストプラクティスのディレクトリ構成でPlaybookを実行する
- AnsibleからWindows Serverに接続するための事前作業
- AnsibleでWindows Serverの初期設定と単体テストを行う
- AnsibleでESXi上に仮想マシンを構築する
本記事では第二弾として、AnsibleからLinuxサーバに接続し処理を実行できるようにするための事前作業を記載する。なお、Ansibleはエージェントレスであり、ほとんどの手順は、SSH接続のために必要な手順を実施すればよく、特殊な手順はほとんどない。
また、SSH接続には公開鍵認証方式とパスワード認証方式の2つの手法がある。本記事では両方の手順について記載する。
認証方式 | 説明 |
---|---|
公開鍵認証方式 | SSHクライアント (Ansibleコントロールノード) で作成した公開鍵をSSHサーバ (実行対象サーバ) に信頼できるものとして事前に登録しておき、認証時に送られてる署名情報を復号して検証することで認証を行う方式。 |
パスワード認証方式 | ユーザ、パスワードによる認証を行う方式。 |
環境
コントロールノード及び実行対象サーバのLinuxのOSは、AlmaLinuxにて構築している。ただし、Red Hat系のディストリビューションであるCentOSやRocky Linuxなどでも同様の手順で対応できるだろう。
- コントロールノード
- OS : AlmaLinux 8.5
- Ansible : ansible [core 2.13.1]
- Ansible実行対象サーバ
- OS : AlmaLinux 8.5
- IPアドレス : 192.168.11.193
AnsibleによるLinuxサーバ接続手順 (公開鍵認証)
1. Ansible実行用ユーザを作成しパスワードを設定
実行対象サーバにてAnsible実行用ユーザを作成する。今回はansibleuser
という名前のユーザを作成した。
また、公開鍵認証で接続するユーザとなるが、初回の鍵登録時にSSH接続が必要となるので、任意のパスワードを設定しておく。本ユーザはsudoで特権コマンドの実行が可能となるため、強固なパスワードを設定することをお勧めする。
[実行対象サーバ]
# useradd -u 2001 ansibleuser
# echo 'ansibleuser:[任意のパスワード]' | chpasswd
2. sudo設定を追加
Ansible実行ユーザで特権コマンドを実行できるよう、sudoの設定を追加する。
[実行対象サーバ]
# echo 'ansibleuser ALL=(root) NOPASSWD:ALL' >> /etc/sudoers
# visudo -c
/etc/sudoers: 正しく構文解析されました
4. Ansibleコントロールノードより公開鍵をコピー
SSHクライアントとなるAnsibleコントロールノードにて、秘密鍵と公開鍵の作成を行う。いくつか確認を求められるが、すべてエンターを押しておけば問題ない。
[Ansibleコントロールノード]
# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): ★そのままエンター
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): ★そのままエンター
Enter same passphrase again: ★そのままエンター
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:ka6cvxU3D8QZZVYg3xRYfXWfL5sKYRDo4EZv+Zu/leU root@ansible
The key's randomart image is:
+---[RSA 3072]----+
| .o.=*=. oo|
~(中略)~
| ++=o. |
+----[SHA256]-----+
作成した公開鍵をssh-copy-id
コマンドで実行対象サーバにコピーする。
[Ansibleコントロールノード]
# ssh-copy-id -i ~/.ssh/id_rsa.pub ansibleuser@192.168.11.193
5. Ansibleコントロールノードからの接続確認
最後に動作確認として、Ansibleのping
モジュールを用いて接続確認を行う。インベントリファイルと呼ばれる実行対象サーバの情報を記載したファイルをhosts
という名前で作成し、ansible
コマンドを用いてping
モジュールを実行する。
特にパスワードを入力を求められることなく、pong
が返ってくればOKとなる。
[Ansibleコントロールノード]
# cd ~
# echo "192.168.11.193" > hosts
# ansible -i hosts -u ansibleuser -m ping 192.168.11.193
192.168.11.193 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": false,
"ping": "pong" ★pongが返ってくればOK
}
AnsibleによるLinuxサーバ接続手順 (パスワード認証)
1. Ansible実行用ユーザを作成しパスワードを設定
実行対象サーバにてAnsible実行用ユーザを作成する。今回はansibleuser
という名前のユーザを作成した。
[実行対象サーバ]
# useradd -u 2001 ansibleuser
# echo 'ansibleuser:[任意のパスワード]' | chpasswd
2. Ansible実行用ユーザをwheelグループに追加
sudo実行時もパスワード認証にて行うようにできるため、今回はsudoを設定するのではなく、もともと用意されているwheelグループに所属させる方針とする。
[実行対象サーバ]
# usermod -aG wheel ansibleuser
3. Ansibleコントロールノードからの接続確認
最後に動作確認として、Ansibleのping
モジュールを用いて接続確認を行う。
パスワードを入力が必要となるため、--ask-pass
オプションを付与して実行する。正しいパスワードを入力することでping
モジュールが実行され、pong
が返ってくればOKとなる。
[Ansibleコントロールノード]
# cd ~
# echo "192.168.11.193" > hosts
# ansible -i hosts -u ansibleuser -m ping 192.168.11.193 --ask-pass
SSH password: ★ansibleuserのパスワードを入力
192.168.11.193 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": false,
"ping": "pong" ★pongが返ってくればOK
}
ただし、毎回パスワードを入力することは手間となる。パスワード入力を回避したい場合は、インベントリファイルにansible_password
の変数を設定しパスワードを登録しておけば、パスワードを入力を省略できる。
※(2022/7/23修正) ansible_ssh_pass
をansible_password
に修正。
# echo "192.168.11.193 ansible_password=[ansibleuserのパスワード]" > hosts
# ansible -i hosts -u ansibleuser -m ping 192.168.11.193
192.168.11.193 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": false,
"ping": "pong" ★pongが返ってくればOK
}
ただし、この方法ではパスワードが平文でテキストファイルに書かれてしまうという問題があり、セキュリティリスクがある。パスワードを平文でインベントリファイルやPlaybookに記載しないためのツールとして、「Ansible Vault」があるが、こちらについては別記事で使用方法を紹介することとしたい。
以上で、AnsibleからLinuxサーバに接続するための事前作業は完了となる。次回以降の記事で、実際にLinuxサーバに対してPlaybookを実行してみたいと思う。
参考
更新履歴
- 2022/7/23
ansible_ssh_pass
をansible_password
に修正。
0 件のコメント:
コメントを投稿