ウェブサイト検索

Debian 11にAnsibleをインストールして使用する方法


Debian 11にAnsibleをインストールして使用する方法

このページで

  1. 前提条件
  2. Debian 11にAnsibleをインストールする

    1. APTを使用してAnsibleをインストールする
    2. PIPを使用してAnsibleをインストールする
  3. sshpassをインストールする
  4. Ansibleホストインベントリファイルを作成する
  5. Ansibleを使った作業
  6. 結論

Ansibleは無料でオープンソースの、最も人気のある構成管理ツールの一つです。これはクロスプラットフォームのツールで、クラウドコンピューティング、構成管理、パッケージのインストール、サービスの設定を簡素化します。YAMLファイルを使用して、ユーザーが特定のマシンで実行したいステップを含めます。Ansibleを使用すると、単一のコマンドで多数のホストを構成および管理できます。Ansibleは、ChefやPuppetなどの他の構成管理ツールの代替として機能します。

この記事では、Debian 11にAnsible構成管理ツールをインストールして使用する方法をお見せします。

前提条件

  • Debian 11を実行しているサーバーが3台。
  • 各サーバーにルートパスワードが設定されています。

このチュートリアルの目的のために、以下の設定を使用します:

  • Ansible コントローラー - 192.168.10.9
  • Ansible ホスト - 192.168.10.10, 192.168.10.11

Debian 11にAnsibleをインストールする

デフォルトでは、AnsibleパッケージはDebianのデフォルトリポジトリには含まれていません。Debian 11にAnsibleをインストールする方法は2つあります。

  1. APTコマンドの使用
  2. PIPコマンドを使用する

APTを使用してAnsibleをインストールする

まず、システムにいくつかの依存関係をインストールする必要があります。必要な依存関係は、次のコマンドを使用してインストールできます:

apt-get install gnupg2 curl wget -y

すべての依存関係がインストールされたら、APTのsource.listを編集し、Ansibleリポジトリを追加します:

nano /etc/apt/sources.list

次の行を追加してください:

deb http://ppa.launchpad.net/ansible/ansible/ubuntu focal main

作業が完了したらファイルを保存して閉じ、その後次のコマンドを使用してAnsibleのGPGキーを追加します:

apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367

次の出力が表示されるはずです:

Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8)).
Executing: /tmp/apt-key-gpghome.lFEjztT9TY/gpg.1.sh --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367
gpg: key 93C4A3FD7BB9C367: public key "Launchpad PPA for Ansible, Inc." imported
gpg: Total number processed: 1
gpg:               imported: 1

今、リポジトリを更新して、以下のコマンドでAnsibleをインストールします:

apt-get update
apt-get install ansible -y

Ansibleがインストールされたら、以下のコマンドでAnsibleのバージョンを確認してください。

ansible --version

次の出力を得るべきです:

ansible 2.10.8
  config file = None
  configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3/dist-packages/ansible
  executable location = /usr/bin/ansible
  python version = 3.9.2 (default, Feb 28 2021, 17:03:44) [GCC 10.2.1 20210110]

PIPを使用してAnsibleをインストールする

まず、PythonとPIPをシステムにインストールする必要があります。以下のコマンドを使用してインストールできます:

apt-get install python3 python3-pip -y

インストールが完了したら、以下のようにpipコマンドを使ってAnsibleをインストールします:

pip install ansible

sshpassをインストールする

sshpassは、SSHコマンドにパスワードを提供するためのコマンドラインツールです。ここでは、Ansibleコントローラーノードでsshpassを使用して、リモートホストを認証します。

次のコマンドでsshpassをインストールできます:

apt-get install sshpass -y

次に、最初のAnsibleリモートホストに接続して、known_hostsファイルにSSHフィンガープリントを追加します:

ssh [email 

以下のようにSSHパスワードの入力を求められます:

The authenticity of host '192.168.10.10 (192.168.10.10)' can't be established.
ECDSA key fingerprint is SHA256:q3zMoJ6qdjYvAdL7/w4Z0gm0ZEgGOB+rNIPKEMdYS6o.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.10.10' (ECDSA) to the list of known hosts.
Password: 

パスワードを入力し、Enterキーを押してSSHフィンガープリントを追加してください。

次に、2番目のAnsibleリモートホストに接続して、known_hostsファイルにSSHフィンガープリントを追加します:

ssh [email 

以下のようにSSHパスワードの入力を求められます:

The authenticity of host '192.168.10.11 (192.168.10.11)' can't be established.
ECDSA key fingerprint is SHA256:q3zMoJ6qdjYvAdL7/w4Z0gm0ZEgGOB+rNIPKEMdYS6o.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.10.11' (ECDSA) to the list of known hosts.
Password: 

パスワードを入力し、Enterキーを押してください。

今、sshpassコマンドを使用してSSH接続を確認できます:

sshpass -p yourpassword ssh [email 

Ansibleホストインベントリファイルを作成する

次に、リモートホストのIPアドレス、ユーザー名、パスワード、SSHポートを定義するためにインベントリファイルを作成する必要があります:

nano ~/.hosts

次の行を追加してください:

[servers]
server1 ansible_host=192.168.10.10 ansible_user=root ansible_ssh_pass=password ansible_ssh_port=22
server2 ansible_host=192.168.10.11 ansible_user=root ansible_ssh_pass=password ansible_ssh_port=22

ファイルを保存して閉じてください。

注: 上記のファイルでは、リモートホストのIP、ユーザー名、パスワード、およびSSHポートを使用します。

Ansibleを使った作業

Ansibleは、リモートホストを管理するのに役立つ多くのモジュールを提供しています。

Ansibleを実行するための基本的な構文は以下の通りです:

ansible -i [inventory_file] -m [module] [host]

すべてのホストへのping接続を確認しましょう:

ansible -i ~/.hosts -m ping all

すべてが順調であれば、次の出力が得られるはずです:

server2 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false,
    "ping": "pong"
}
server1 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false,
    "ping": "pong"
}

サーバー1のPing接続を確認したい場合は、次のコマンドを実行してください。

ansible -i ~/.hosts -m ping server1

次の出力を得るべきです:

server1 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false,
    "ping": "pong"
}

シェルモジュールを使用して、リモートホスト上で全てのコマンドを実行することができます。

たとえば、server2で「free -m」コマンドを実行するには、次のコマンドを実行してください:

ansible -i ~/.hosts -m shell -a "free -m" server2

次の出力を見るべきです:

server2 | CHANGED | rc=0 >>
               total        used        free      shared  buff/cache   available
Mem:            1982         128         491           2        1363        1669
Swap:              0           0           0

サーバー2で「df -h」コマンドを実行するには、以下のコマンドを実行してください:

ansible -i ~/.hosts -m shell -a "df -h" server2

次の出力を得るべきです:

server2 | CHANGED | rc=0 >>
Filesystem      Size  Used Avail Use% Mounted on
udev            976M     0  976M   0% /dev
tmpfs           199M  404K  198M   1% /run
/dev/sda1        50G  2.4G   45G   5% /
tmpfs           992M  124K  992M   1% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           199M     0  199M   0% /run/user/0

Ansibleはリモートホストに任意のパッケージをインストールするためのaptモジュールを提供します。

server1にNginxパッケージをインストールするには、以下のコマンドを実行してください。

ansible -i ~/.hosts -m ansible.builtin.apt -a "name=nginx state=present" server1

次の出力を得るべきです:

server1 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "cache_update_time": 1631424599,
    "cache_updated": false,
    "changed": true,
    "stderr": "",
    "stderr_lines": [],
        "Upgrading binary: nginx.",
        "Setting up nginx (1.18.0-6.1) ...",
        "Processing triggers for man-db (2.9.4-2) ...",
        "Processing triggers for libc-bin (2.31-13) ..."
    ]
}

server1でNginxサービスのステータスを確認するには、以下のコマンドを実行します:

ansible -i ~/.hosts -m shell -a "systemctl status nginx" server1

次の出力を得るべきです:

server1 | CHANGED | rc=0 >>
? nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Sun 2021-09-12 05:55:36 UTC; 49s ago
       Docs: man:nginx(8)
    Process: 10761 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
    Process: 10764 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
   Main PID: 10871 (nginx)
      Tasks: 2 (limit: 2341)
     Memory: 5.8M
        CPU: 54ms
     CGroup: /system.slice/nginx.service
             ??10871 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
             ??10874 nginx: worker process

Sep 12 05:55:36 ansible systemd[1]: Starting A high performance web server and a reverse proxy server...
Sep 12 05:55:36 ansible systemd[1]: nginx.service: Failed to parse PID from file /run/nginx.pid: Invalid argument
Sep 12 05:55:36 ansible systemd[1]: Started A high performance web server and a reverse proxy server.

Ansibleはリモートホスト上でユーザーを作成および管理するためのユーザーモジュールを提供します。

サーバー1にuser1という新しいユーザーを作成するには、以下のコマンドを実行してください:

ansible -i ~/.hosts -m ansible.builtin.user -a "name=user1 password=yourpassword" server1

次の出力が表示されるはずです:

server1 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": true,
    "comment": "",
    "create_home": true,
    "group": 1000,
    "home": "/home/user1",
    "name": "user1",
    "password": "NOT_LOGGING_PASSWORD",
    "shell": "/bin/sh",
    "state": "present",
    "system": false,
    "uid": 1000
}

結論

この記事では、APTとPIPを使用してAnsibleをインストールする方法を学びました。また、リモートホストを管理するためにさまざまなAnsibleモジュールを使用する方法も学びました。これでAnsibleについて十分に理解できていることを願っています。質問があれば気軽に聞いてください。

関連記事: