Ansible設定 · 2 min read · Dec 19, 2025

Ubuntu 20.04にAnsibleをインストールして設定する方法

Ansibleは、大規模なサーバーの管理プロセスを効率化するために設計された非常に人気のある構成管理ツールです。単一のノードから、複数のサーバーを制御し、それらでプロセスを同時に実行できます。

Ansibleは、サーバーノードに特別なソフトウェアをインストールする必要がなく、SSHを介してそれらを制御できます。

このガイドでは、Ubuntu 20.04サーバーにAnsibleをインストールして設定する方法を学びます。

前提条件

  • OpenSSHサーバーがインストールされた2つ以上のUbuntu 20.04ベースのサーバーシステム。
  • サーバーとノードの両方がパブリックIPアドレスを介してアクセス可能であること。
  • Ansibleサーバーにsudo権限を持つ非rootユーザーが設定されており、Ansibleクライアントにパスワードが設定されたrootユーザーがいること。

Ansibleのインストール

Ansibleの公式リポジトリは、このチュートリアル執筆時点でのUbuntuのpythonライブラリのバグのため、Ubuntu 20.04をサポートしていません。

幸いなことに、UbuntuにはAnsible 2.9が付属しており、これをインストールします。次のコマンドを実行してAnsibleをインストールします。

$ sudo apt install ansible -y

次のコマンドを実行してインストールをテストします。

$ ansible --version
ansible 2.9.6
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/home/username/.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.8.5 (default, Jan 27 2021, 15:41:15) [GCC 9.3.0]

インベントリファイルの設定

複数のホストに接続できるようにするには、ノードの詳細を記録するファイルが必要です。このファイルはインベントリファイルと呼ばれます。

制御したいサーバーの数に応じて、Ansibleのインベントリファイルでは、それらをグループやサブグループに整理することもできます。また、選択したホストやグループに適用可能なカスタム変数を設定することもでき、指示を渡す際にさらに使用できます。

Ansibleには、デフォルトのインベントリファイルが/etc/ansible/hostsに用意されています。Nanoエディタで開きます。

$ sudo nano /etc/ansible/hosts

ファイルの下部に次のコードを貼り付けます。

[servers]
server1 ansible_host=203.0.113.111
server2 ansible_host=203.0.113.112
server3 ansible_host=203.0.113.113

[all:vars]
ansible_python_interpreter=/usr/bin/python3

serversセクションは、接続したいノードのリストを定義します。サーバーを複数のグループに整理するために、必要なだけ多くのグループを作成できます。

all:varsグループは、インベントリ内のすべてのホストにansible_python_interpreterパラメータを設定します。これにより、Ansibleは最近のUbuntuバージョンから削除されたPython 2の代わりにPython 3の実行可能ファイルを使用します。

完了したら、CTRL+Xを押してファイルを保存し、YENTERを押して変更を確認します。

注意: 自分のインベントリファイルを任意の場所に作成することもでき、Ansibleコマンドを実行する際に-iパラメータを使用して渡すことができます。

次のコマンドでインベントリリストを確認できます。

$ ansible-inventory --list -y
all:
  children:
    servers:
      hosts:
        server1:
          ansible_host: 203.0.113.111
          ansible_python_interpreter: /usr/bin/python3
        server2:
          ansible_host: 203.0.113.112
          ansible_python_interpreter: /usr/bin/python3
        server3:
          ansible_host: 203.0.113.113
          ansible_python_interpreter: /usr/bin/python3
    ungrouped: {}

サーバーをグループおよびサブグループに整理する

これは、特定の機能を持つサーバーが多数ある場合に便利なヒントです。たとえば、この方法を使用して、Webサーバーとデータベースサーバーを別々にグループ化できます。ホストを複数のグループの一部にすることもできます。これを実現するには、インベントリファイルは次のようになります。

[webservers]
203.0.113.111
203.0.113.112

[dbservers]
203.0.113.113
server_hostname

[development]
203.0.113.111
203.0.113.113

[production]
203.0.113.112
server_hostname

SSHキーの設定

Ansibleがサーバーに接続できるようにするには、Ansibleサーバーとインベントリファイルに指定されたホスト間でSSHキーを構成する必要があります。これは、Ansibleクライアントに公開鍵が有効になっておらず、パスワードで有効なrootアカウントがある場合にのみ機能します。

AnsibleとそのノードのためにSSHキーを作成して設定するには、次の手順を実行します。

Ansible用のキーを作成します。

$ ssh-keygen -t rsa -b 4096 -C "Ansible key"

公開鍵をリモートサーバーのアカウントにコピーします。これには、ssh-copy-idコマンドを使用します。

$ ssh-copy-id -i $HOME/.ssh/id_rsa.pub [email protected]
$ ssh-copy-id -i $HOME/.ssh/id_rsa.pub [email protected]
$ ssh-copy-id -i $HOME/.ssh/id_rsa.pub [email protected]

これで完了です。Ansibleはサーバーと通信できるようになります。

既存の公開鍵を持つノードでのSSHキーの設定

クライアントにすでに公開鍵が有効になっている場合は、いくつかの追加手順に従う必要があります。そのためには、各ノードサーバーにAnsible専用の新しいユーザーを作成する必要があります。そのユーザーは、パスワードなしでアクセスできるsudo権限を持ち、Ansibleサーバーからのみアクセス可能です。

ansibleユーザーを作成するには、次のコマンドを実行します。

$ sudo adduser ansible

強力なパスワードを選択し、他のすべてのフィールドは空のままにします。

次に、次のコマンドを使用してこのユーザーにパスワードなしのsudoアクセスを構成します。

$ echo "ansible ALL=(ALL) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/ansible

新しいユーザーが追加され、構成されたので、次のコマンドを使用してAnsibleサーバーからノードサーバーにSSHキーをコピーできます。

$ ssh-copy-id [email protected]

ansibleユーザーのパスワードを求められます。入力すると、SSHキーがコピーされます。

次に、ノードサーバーでansibleユーザーのパスワードベースのログインを無効にします。

$ sudo usermod -L ansible

これで、ノードサーバーはAnsibleサーバーからのみアクセス可能です。なぜなら、そのサーバーだけが公開鍵を持っており、パスワードログインが無効になっているため、ノードサーバーでsudo権限を直接使用することはできません。

これらの手順を各ノードサーバーに対して繰り返す必要があります。また、このチュートリアルではrootユーザーをansibleユーザーに置き換えてください。

接続のテスト

インベントリファイルとSSHキーを設定した後、Ansibleがサーバーに接続できるかどうかを確認します。

次のコマンドを入力して接続を確認します。このコマンドは、インベントリファイルからすべてのサーバーへの接続をテストします。

$ ansible all -m ping -u root

このコマンドは、Ansibleのpingモジュールを使用してすべてのサーバーで接続テストを実行します。次のような出力が得られるはずです。

server1 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}
server2 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}
server3 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}

Ansibleを初めて使用する場合は、すべてのサーバーの信頼性を確認するよう求められます。プロンプトが表示されたら、yesと入力してENTERを押して確認します。

基本的なコマンドを実行する

Ansibleを使用してサーバーで基本的なコマンドを実行してみましょう。サーバーでコマンドを実行するには、次の形式を使用します。

$ ansible all -a "command" -u 

ディスク使用量の確認

まず、すべてのサーバーでディスク使用量を確認しましょう。

$ ansible all -a "df -h" -u root
server1 | CHANGED | rc=0 >>
Filesystem      Size  Used Avail Use% Mounted on
udev            3.9G     0  3.9G   0% /dev
tmpfs           798M  624K  798M   1% /run
/dev/vda1       155G  2.3G  153G   2% /
tmpfs           3.9G     0  3.9G   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/vda15      105M  3.6M  101M   4% /boot/efi
tmpfs           798M     0  798M   0% /run/user/0

server2 | CHANGED | rc=0 >>
Filesystem      Size  Used Avail Use% Mounted on
udev            2.0G     0  2.0G   0% /dev
tmpfs           395M  608K  394M   1% /run
/dev/vda1        78G  2.2G   76G   3% /
tmpfs           2.0G     0  2.0G   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           2.0G     0  2.0G   0% /sys/fs/cgroup
/dev/vda15      105M  3.6M  101M   4% /boot/efi
tmpfs           395M     0  395M   0% /run/user/0

個々のホストとグループをターゲットにする

これまで、すべてのリモートサーバーでコマンドを一度に実行していました。しかし、常にそうとは限りません。特定のサーバーでコマンドを実行するには、次の形式を使用します。

$ ansible server1 -a "uptime" -u root
server1 | CHANGED | rc=0 >>
 21:38:26 up 11 min,  2 users,  load average: 0.00, 0.20, 0.19

上記のコマンドは、インベントリグループからserver1の稼働時間を確認します。

次の形式を使用して複数のサーバーをターゲットにすることもできます。

$ ansible server1:server2 -m ping -u root

インベントリファイルからグループやサブグループを直接ターゲットにすることもできます。

$ ansible groupname -m ping -u 

すべてのサーバーを更新する

このチュートリアルでは、すべてのリモートサーバーがDebianまたはUbuntu OSを実行していると仮定しています。

次のコマンドを実行して、すべてのサーバーのソフトウェアを更新します。

$ ansible all -m apt -a "update_cache=yes upgrade=yes" -u root

-mパラメータは、Ansibleが実行するモジュールを定義します。-aは、関連するモジュールの引数またはコマンドを指します。ここでは、前の例でpingモジュールを使用したように、サーバーを更新するためにAnsibleのaptモジュールを使用しています。update_cacheはサーバーのAPTキャッシュを更新し、upgrade=yesはAnsibleにapt upgradeコマンドを実行するよう指示します。

CentOSサーバーを更新するには、aptyumに置き換えるだけで同じコマンドを使用できます。Fedoraサーバーの場合は、aptdnfに置き換えます。

上記のようにansibleユーザーを使用している場合は、sudo権限を持つようにansibleコマンドを修正する必要があります。

$ ansible server2 -m apt -a "update_cache=yes upgrade=yes" -K -b -u ansible

ここで、-Kは特権昇格パスワードを要求します。-bは、別のユーザーとして操作を実行するためにansible操作を実行します。これらの変数を組み合わせることで、ansibleは特権昇格を持って実行されます。sudo権限が必要なすべてのコマンドに対してこれを使用する必要があります。

時々、これらの更新コマンドのいくつかは再起動を必要とする場合があるので、次のコマンドを実行してすべてのサーバーを再起動します。

$ ansible all -a "reboot" -u root

これらは、Ansibleを使用して実行できる基本的なコマンドのいくつかです。

結論

これで、Ubuntu 20.04ベースのサーバーにAnsibleをインストールして設定する方法に関するチュートリアルは終了です。質問がある場合は、下のコメントに投稿してください。

Share: X/Twitter LinkedIn

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。