2022年7月23日土曜日

AnsibleからLinuxサーバに接続するための事前作業

前回の記事にて、Ansibleコントロールノードを構築手順を記載した。今までと、これから執筆予定のAnsible関連記事は以下となる。

本記事では第二弾として、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_passansible_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_passansible_passwordに修正。

0 件のコメント:

コメントを投稿

人気の投稿