Ansibleをインストールしてみた

スポンサーリンク

はじめに

今後のプロジェクトでAnsibleを使用することになりました。検証を兼ねていろいろ触ってみることにします。

Ansibleのインストール

前提条件

メモリ:4GB以上
OS:CentOS7.9を最小インストール済み
作成ユーザー:ansible

インストール

システムのアップデート

# yum update -y

sudoの有効化

ansibleユーザーでsudoが実行できるように「ansible ALL=(ALL) NOPASSWD: ALL」を追加します。

# visudo

## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
ansible ALL=(ALL)       NOPASSWD: ALL

EPELリポジトリの有効化

$ sudo yum install -y http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

Ansibleのインストール

$ sudo yum install ansible -y

Ansibleのバージョン確認

$ ansible --version
ansible 2.9.17
  config file = /etc/ansible/ansible.cfg
  configured module search path = [u'/home/ansible/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 2.7.5 (default, Nov 16 2020, 22:23:17) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)]
[ansible@ansible ~]$

Ansibleの動作確認

「Adhocコマンド」は特定のモジュールとパラメータを使用して簡単な処理を実行できます。ローカルホストに対してPingを発行します。「SUCCESS」の結果が返ってきましたのでPingの応答が確認できました。

$ ansible localhost -m ping
localhost | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

他のホストに対してPingを実施します。Pingが失敗しました。調べてみるとAnsibleは実行内容によって操作対象のサーバに重大な影響を及ぼすため実行が許可されるのはhostsリストに書かれたサーバのみとなります。

$ ansible IPアドレス -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: IPアドレス

hostsリストファイルは、デフォルトで「/etc/ansible/hosts」なので、操作対象サーバのIPを追加します。

$ sudo vi /etc/ansible/hosts
[servers]
IPアドレス

再度、Pingを実施します。再び、Pingが失敗しました。

$ ansible IPアドレス -m ping
IPアドレス | UNREACHABLE! => {
    "changed": false,
    "msg": "Failed to connect to the host via ssh: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).",
    "unreachable": true
}

Ansibleではhostsリストファイルの他に認証が必要とのこと。認証には秘密鍵を使う方法やパスワードを入力する方法があります。今回はパスワードを使う方法で試します。(-kオプションをつける)

$ ansible IPアドレス -m ping -k
SSH password:
IPアドレス | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}

今度はPingが成功しました。もし、ここでErrorになる場合はPythonがインストールされているか確認して下さい。

ついでに秘密鍵を使う方法も試しておきます。SSHで利用する認証用の鍵を生成します。鍵の置き場所はデフォルト、パスワードはなし(そのままEnter)にしています。

$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/ansible/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/ansible/.ssh/id_rsa.
Your public key has been saved in /home/ansible/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:y7TP8BW+ZTEO1FgYSZcuDfPZjQwCqSS3c1r+jYcUxns
The key's randomart image is:
+---[RSA 2048]----+
|        .+ooo... |
|    . o ..= =+.  |
|     + o = *.O.+.|
|      + o *.E+B o|
|       oS  +=.+  |
|       o o . + o |
|        =   o +  |
|         = . +   |
|          + .    |
+----[SHA256]-----+
[ansible@ansible ~]$

作成したキーを操作対象サーバへコピーします。

$ ssh-copy-id IPアドレス
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/ansible/.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
ansible@IPアドレス's password:

Number of key(s) added: 1

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

[ansible@ansible ~]$

操作対象サーバで鍵がコピーされたか確認します。「authorized_keys」があればコピーされています。

$ ll -a .ssh/
合計 4
drwx------  2 ansible ansible  29  2月 21 04:26 .
drwx------. 5 ansible ansible 122  2月 21 16:14 ..
-rw-------  1 ansible ansible 794  2月 28 21:58 authorized_keys
[ansible@a1 ~]$

Pingを実行します。無事、成功しました。

$ ansible IPアドレス -m ping
IPアドレス | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}

コメント