検証環境の構築


事前にインストールしておくツール

検証のため事前に次のツールをインストールします。

ご用心

32 bit 版と 64 bit 版があるときは 64bit 版をインストールします。


検証用ホストの作成

  • Vagrant で検証用ホスト( Ansible サーバー + 管理対象ホスト x 3 )を作成します。
  • OS はすべて CentOS 7 です。
  • 使用するユーザーアカウントは vagrant です。

ホストの仕様

Ansible サーバー
ホスト名 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/ディレクトリにコピーします。

  1. 管理対象ホストの秘密鍵を別名にコピーします。
管理対象ホスト 元のファイル名 コピー後のファイル名
node1 private_key node1_key
node2 private_key node2_key
node3 private_key node3_key
  1. コピーした秘密鍵を WinSCP などで Ansible サーバーの~/.ssh/ディレクトリへコピーします。
  2. コピーした秘密鍵のパーミッションを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