はじめに
今後のプロジェクトで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"
}
コメント