検証環境の構築¶
検証用ホストの作成¶
- Vagrant で検証用ホスト( Ansible サーバー + 管理対象ホスト x 3 )を作成します。
- OS はすべて CentOS 7 です。
- 使用するユーザーアカウントは vagrant です。
ホストの仕様¶
ホスト名 | MAC アドレス | IP アドレス | CPU 数 | メモリ(MB) |
ansible | 000d58000151 | 192.168.1.151 | 2 | 8192 |
ホスト名 | MAC アドレス | IP アドレス | CPU 数 | メモリ (MB) |
node1 | 000d58000161 | 192.168.1.161 | 1 | 4096 |
node2 | 000d58000162 | 192.168.1.162 | 1 | 4096 |
node3 | 000d58000163 | 192.168.1.163 | 1 | 4096 |
Vagrantfile¶
$script1 = <<-'SCRIPT'
timedatectl set-timezone Asia/Tokyo
yum -y remove open-vm-tools
yum -y update
SCRIPT
$script2 = <<-'SCRIPT'
yum -y install epel-release
yum -y install vim-enhanced
yum -y install ansible
SCRIPT
Vagrant.configure("2") do |config|
config.vm.box = "centos/7"
config.vm.provider "virtualbox" do |vb|
vb.memory = "4096"
vb.cpus = 1
vb.customize [
"modifyvm", :id,
"--ioapic", "on",
"--graphicscontroller", "vmsvga"
]
end
config.vm.define :ansible do |ansible|
ansible.vm.network "public_network", mac: "000d58000151", ip: "192.168.1.151"
ansible.vm.hostname = "ansible"
ansible.vm.provider "virtualbox" do |vb|
vb.name = "Ansible"
vb.memory = "8192"
vb.cpus = 2
end
ansible.vm.provision "shell", inline: $script1
ansible.vm.provision "shell", inline: $script2
end
config.vm.define :node1 do |node1|
node1.vm.network "public_network", mac: "000d58000161", ip: "192.168.1.161"
node1.vm.hostname = "node1"
node1.vm.provider "virtualbox" do |vb|
vb.name = "node1"
end
node1.vm.provision "shell", inline: $script1
end
config.vm.define :node2 do |node2|
node2.vm.network "public_network", mac: "000d58000163", ip: "192.168.1.162"
node2.vm.hostname = "node2"
node2.vm.provider "virtualbox" do |vb|
vb.name = "node2"
end
node2.vm.provision "shell", inline: $script1
end
config.vm.define :node3 do |node3|
node3.vm.network "public_network", mac: "000d58000163", ip: "192.168.1.163"
node3.vm.hostname = "node3"
node3.vm.provider "virtualbox" do |vb|
vb.name = "node3"
end
node3.vm.provision "shell", inline: $script1
end
end
Vagrant コマンド¶
vagrant up
vagrant reload
Ansible サーバーに管理対象ホストの秘密鍵を設定¶
Vagrant で作成した仮想マシンの秘密鍵はすべての同じファイル名 private_key です。これを管理対象ホストごとにファイル名を変更し、 Ansible サーバーの~/.ssh/
ディレクトリにコピーします。
- 管理対象ホストの秘密鍵を別名にコピーします。
管理対象ホスト | 元のファイル名 | コピー後のファイル名 |
node1 | private_key | node1_key |
node2 | private_key | node2_key |
node3 | private_key | node3_key |
- コピーした秘密鍵を WinSCP などで Ansible サーバーの
~/.ssh/
ディレクトリへコピーします。 - コピーした秘密鍵のパーミッションを
0600
に変更します。
作業後の Ansible サーバーの~/.ssh/
ディレクトリの状態です。
[vagrant@ansible ~]$ ls -l ~/.ssh
total 16
-rw-------. 1 vagrant vagrant 389 Apr 18 20:26 authorized_keys
-rw-------. 1 vagrant vagrant 1706 Apr 18 20:38 node1_key
-rw-------. 1 vagrant vagrant 1702 Apr 18 20:49 node2_key
-rw-------. 1 vagrant vagrant 1706 Apr 18 21:02 node3_key
[vagrant@ansible ~]$
管理対象ホストのフィンガープリントの収集¶
Ansible サーバーが管理対象ホストを管理するには、事前に管理対象ホストのフィンガープリントが保存されていなければなりません。フィンガープリントの収集と接続テストとして Ansible サーバーから管理対象ホストに ssh 接続します。
収集した管理対象ホストのフィンガープリントは~/.ssh/known_hosts
ファイルに記録されます。
[vagrant@ansible ~]$ ssh 192.168.1.161 -l vagrant -i ~/.ssh/node1_key
The authenticity of host '192.168.1.161 (192.168.1.161)' can't be established.
ECDSA key fingerprint is SHA256:UNUhsVH7Qld9Ew0ED6X45Yb1f1ms8bDPQ1nl5pfY14k.
ECDSA key fingerprint is MD5:e4:f6:82:7e:4f:c0:4c:63:e7:e9:52:45:47:27:ed:44.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.161' (ECDSA) to the list of known hosts.
[vagrant@node1 ~]$ logout
Connection to 192.168.1.161 closed.
[vagrant@ansible ~]$ ssh 192.168.1.162 -l vagrant -i ~/.ssh/node2_key
The authenticity of host '192.168.1.162 (192.168.1.162)' can't be established.
ECDSA key fingerprint is SHA256:YuZuGUV8z8ELd5Fw9ED4tinwkcF58/NUuX5w8hkghn8.
ECDSA key fingerprint is MD5:42:e7:0b:a9:42:84:31:13:68:fc:55:25:80:57:f8:01.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.162' (ECDSA) to the list of known hosts.
[vagrant@node2 ~]$ logout
Connection to 192.168.1.162 closed.
[vagrant@ansible ~]$ ssh 192.168.1.163 -l vagrant -i ~/.ssh/node3_key
The authenticity of host '192.168.1.163 (192.168.1.163)' can't be established.
ECDSA key fingerprint is SHA256:sQ3tRIeDTA925zIDEkQAAvJ6dkT0zgYWF8DqJLR41Mg.
ECDSA key fingerprint is MD5:b8:df:9d:10:8d:89:77:ee:49:97:be:b5:fe:d6:f0:07.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.163' (ECDSA) to the list of known hosts.
[vagrant@node3 ~]$ logout
Connection to 192.168.1.163 closed.
[vagrant@ansible ~]$ ls -l ~/.ssh/
total 20
-rw-------. 1 vagrant vagrant 389 Apr 18 20:26 authorized_keys
-rw-r--r--. 1 vagrant vagrant 525 Apr 18 22:19 known_hosts
-rw-------. 1 vagrant vagrant 1706 Apr 18 20:38 node1_key
-rw-------. 1 vagrant vagrant 1702 Apr 18 20:49 node2_key
-rw-------. 1 vagrant vagrant 1706 Apr 18 21:02 node3_key
[vagrant@ansible ~]$ cat ~/.ssh/known_hosts
192.168.1.161 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBGE6rOPnLm36McURf9DCfyixsu99TtX9Qzxi+zliKO+qAv5V2d2XCpj7YxwUN97T6SMwbBc7FwHNrJcfJr9nqOg=
192.168.1.162 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBA3rcVFUncRu9ZT5qxnbJxs4rnt+VU7eusihPkUi2cp1mj8tg0PhACNP5txPjqmX+51/5AOrCmooH878v5kMpPQ=
192.168.1.163 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBLBgk7iSI5wCseZapsb1BVFgOiAVRf/9jE0tNWdzMsjkHRQb/bZzZhJfVxqobgL5DTF9jUyUu8xPa+tSc3SJwLA=
[vagrant@ansible ~]$
ちなみに
Ansible サーバーに~/.ssh/config
ファイルを作成し次の内容を記述すると、事前にフィンガープリントの収集をしなくても管理対象ホストに接続できます。
Host *
StrictHostKeyChecking no
UserKnownHostsFile=/dev/null
この方法は便利ですが、セキュリティの観点からは好ましい方法ではありません。
検証環境の確認¶
「検証用ホストの作成」で Ansible を使用するための前提条件となるタスクは実行済みです。
- Ansible はインストール済みです。
- ssh 接続に必要な設定と鍵は設定済みです。
- root 権限が必要なコマンドが実行可能なように sudo は適切に設定され、権限昇格が可能になっています。
root になるには次のように実行します。
[vagrant@ansible ~]$ sudo -i
インストールされている Ansible のバージョンを確認します。
[root@ansible ~]# ansible --version
ansible 2.9.6
config file = /etc/ansible/ansible.cfg
configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python2.7/site-packages/ansible
executable location = /bin/ansible
python version = 2.7.5 (default, Aug 7 2019, 00:51:29) [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)]
[root@ansible ~]#
root アカウントからログアウトするには次のように実行します。
[root@ansible ~]# exit
環境に関する補足¶
- Ansible はコマンドラインで操作することが多いです。必要に応じて、ソースコードやコマンドをコピー & ペーストしてください。
- 「検証用ホストの作成」で Ansible サーバーに vim をインストールしています。 vim の環境設定はホームディレクトリ内の
.vimrc
ファイルで行います。下記は.vimrc
ファイルの一例です。
set noswapfile
set number
set cursorline
set showmatch
set expandtab
set softtabstop=2
set shiftwidth=2
set autoindent
set showcmd
set visualbell
syntax enable