【Ansible】リモートホストへのPing通信設定手順

Ansibleをインストールして、操作対象となるサーバーに対しての接続確認は「Ping」を使用します。

ただ、AnsibleのPingは通常のPingとは少し仕様が違っており、SSHログインが前提となる設計となっています。

以下ではAnsibleのPing通信ができるまでの設定についてまとめました。

前回、Ansibleインストールについては以下の記事を参考にしてください。

ansible

「Ansible」でリモートホストへの通信を正常に成功させるまでの手順

Ansibleの基本的なコマンドパターン(Adhocコマンド)は以下の通りとなります。

$ ansible [pattern] -m [module] -a "[module options]"

以下では、自分自身にPing通信をした例となります。

[root@ansible ~]# ansible localhost -m ping
localhost | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}

では、リモートホスト向けのPing通信ですが、上記の様に対象機器宛にpingを実行してもエラーとなります。
内容は以下となります。

Ansibleではリモートホストへのpingは「hosts」リストに無いと通信ができない

以下では、リモート対象となるホストへPingを実行した例となります。

[root@ansible ~]# ansible 172.17.0.2 -m ping
[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does
not match 'all'
[WARNING]: Could not match supplied host pattern, ignoring: 172.17.0.2

Ansibleでは実行する内容によっては対象サーバーへ重大な影響を及ぼす可能性があるため、実行を許可するには「hostsリスト」へ対象ホストのホスト名、もしくはIPアドレスの登録が必要となります。
hostsリストは「/etc/ansible/hosts」で実行対象のホストを追加します。

[root@ansible /]# vim /etc/ansible/hosts 

------以下を追記------
[test]
172.17.0.3
172.17.0.2

hostsに登録してもエラーが出る場合はSSH鍵設定をしていない

hostsリストに対象のホストを追加しても以下の様に別のエラーが発生し、Pingの実行は失敗します。

[root@ansible /]# ansible 172.17.0.2 -m ping
The authenticity of host '172.17.0.2 (172.17.0.2)' can't be established.
ECDSA key fingerprint is SHA256:Q6qArNJ1WwmOKjNeWKQoCbxBYglmoE1Lg/pzve3wv/s.
ECDSA key fingerprint is MD5:8b:78:8c:f1:4e:e2:d6:5f:9f:46:66:b3:2b:71:6d:46.
Are you sure you want to continue connecting (yes/no)? yes
172.17.0.2 | UNREACHABLE! => {
    "changed": false, 
    "msg": "Failed to connect to the host via ssh: Warning: Permanently added '172.17.0.2' (ECDSA) to the list of known hosts.\r\nPermission denied (publickey,gssapi-keyex,gssapi-with-mic,password).", 
    "unreachable": true
}

Ansibleは実行対象となるサーバーを操作するために「hosts」の設定が必要となりますが、SSHによる「認証」の設定も必要となります。

以下では簡易的な動作確認として、「-k」オプションを実行した例となります。

[root@ansible ~]# ansible 172.17.0.3 -m ping -k
SSH password: 
172.17.0.3 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}

「-k」オプションを使用することにより、操作対象のサーバーのSSHパスワードを入力し、実行する方法となります。
ただし、毎回パスワードを入力するのが面倒なので、秘密鍵の作成と登録をする認証を実施します。

公開鍵と秘密鍵の作成と登録で認証設定をし、Ping通信を成功させる

認証には公開鍵と秘密鍵の作成による方法があります。

毎回、対象ホストへのアクセスにパスワードを入力する手間を省くために、「ssh-keygen」と「ssh-copy-id」を用いて認証を実施します。

まずは、以下コマンドで、公開鍵と秘密鍵を作成します。

[root@ansible ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
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:bjxy5Wh5dUk6vKuj/4hWe5DAqY/T59EgIoP0i6bxW5Y root@ansible
The key's randomart image is:
+---[RSA 2048]----+
|                 |
|                 |
|  .    . .    .  |
| . o    +  . o . |
|  . + ..S.o.= o  |
|   . =.+ *++ +   |
|. o E .+X.+oo    |
| = o  o=+++o..   |
|. o.   oo===o    |
+----[SHA256]-----+
[root@ansible ~]# 

生成した公開鍵を操作対象サーバーへコピー

上記で、SSHする元(ansible側)で公開鍵を生成したので、それをSSH先のサーバーにコピーするので「ssh-copy-id」と言うコマンドを実行します。

以下は、「ssh-copy-id」コマンドを使用し、対象サーバーへコピーします。

[root@ansible /]# ssh-copy-id 172.17.0.2
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/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
root@172.17.0.2's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh '172.17.0.2'"
and check to make sure that only the key(s) you wanted were added.

[root@ansible /]# 

公開鍵コピー後に再度Pingを実行

上記で、対象サーバーへの公開鍵をコピーしたら再度Ping通信を実行します。

以下の様に問題なく「SUCCESS」が表示されれば成功です。

[root@ansible /]# ansible 172.17.0.2 -m ping
172.17.0.2 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}

ホストグループ単位でPingを実施

次にAnsibleのhostsに追加したホストをグループ単位でPing疎通する方法を紹介します。
Ansibleの「hosts」ファイルを開き、以下の様に[dns]と言うグループ配下に2台のホストを追記します。

[root@ansible /]# vim /etc/ansible/hosts 

------追加------
[dns]
172.17.0.3
172.17.0.2

hostsにホストを登録後、以下の様にグループ名[dns]でPingを実行します。
グループに登録されているホスト全てにPingが実行されます。

[root@ansible /]# ansible dns -m ping
172.17.0.3 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}
172.17.0.2 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}

以上、が「Ansible」のPing疎通設定手順となります。




エンジニアのオンライン学習

ITエンジニアにおすすめの教材、オンラインスクールです。
無料からエンジニアの学習ができる教材などまとめているので参考にしてください。

おすすめオンライン教材
自宅で学習ができるオンラインスクール

ITエンジニアの開発・検証・学習としてインターネット上で専用のサーバ(VPS)を利用しましょう!
実務経験はVPSで学べます。



コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

ABOUT US
げんき☆ひろき
インターネット関連のSEをやっています。 ネットワーク、サーバー、ストレージ、仮想基盤まで幅広く手を出しており、MVNOの構築経験もあります。 現在は、Pythonを使ったプログラミングの開発をしネットワークの自動化ツールを作成しています! Pythonの入門書も作成しているので、ぜひ参考にしてください!