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


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

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

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

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

ansible

Ansibleインストール_Docker(CentOS8)コンテナ環境

2020年9月10日

「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疎通設定手順となります。


関連記事


コメントを残す

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

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

ABOUTこの記事をかいた人

blank

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