#はじめに
意外とこういうのってなかったな、と思って作ってみました。
例えば以下のような準備を一発で行うという話です。
CentOS7用しか作ってないので今度Ubuntu版も作ってみようと思います。
・VMを複数ノードたち上げる
・各VMを同じネットワークに所属させる
・各VMをインターネットに抜けれるようにする
・1号機VMから公開鍵認証により、ノーパスで全VMにsshできるようにする
・1号機VMに全ノードknown_hostsを登録する
もともとAnsible等のインフラ学習のために、環境準備に時間がかかり面倒なため、作成しました。
下記のような構成が欲しいときにローカル上で一瞬に準備します。
SSH⇒
デプロイVM ---- 設定対象VM
#手順
Vagrant ファイルを準備してださい。
Vagrantfile
Vagrant.configure("2") do |config|
config.vm.box = "centos/7"
###############↓設定対象VMを増やす際にはここを追加↓################
config.vm.define :node2 do |node2|
node2.vm.hostname = "node2"
node2.hostmanager.enabled = true
node2.vm.provider "virtualbox" do |vb|
vb.customize ["modifyvm", :id, "--nic2", "natnetwork", "--nat-network2", "net001"]
vb.customize ["modifyvm", :id, "--memory", "1024", "--cpus", "1"]
end
node2.vm.provision "shell", inline: <<-SHELL
yum install git curl wget epel-release sshpass -y
sudo mkdir -m 600 /root/.ssh
echo "password" | passwd --stdin root
sudo sed -i -e 's/PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config
systemctl restart sshd
sudo sed -i -e 's/DEFROUTE=yes/DEFROUTE=no/g' /etc/sysconfig/network-scripts/ifcfg-eth0
sudo cat <<'EOF' > /etc/hosts
192.168.10.8 node1
192.168.10.9 node2
EOF
sudo cat <<'EOF' > /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE="eth1"
BOOTPROTO="none"
ONBOOT="yes"
TYPE="Ethernet"
PERSISTENT_DHCLIENT="no"
IPADDR="192.168.10.9"
GATEWAY="192.168.10.1"
dns1="8.8.8.8"
DEFROUTE="yes"
EOF
sudo sed -i -e '$a nameserver=8.8.8.8' /etc/resolv.conf
sudo systemctl restart network
sleep 10
SHELL
end
###############↑設定対象VMを増やす際にはここを追加↑################
config.vm.define :node1 do |node1|
node1.vm.hostname = "node1"
node1.hostmanager.enabled = true
node1.vm.provider "virtualbox" do |vb|
vb.customize ["modifyvm", :id, "--nic2", "natnetwork", "--nat-network2", "net001"]
vb.customize ["modifyvm", :id, "--memory", "1024", "--cpus", "1"]
end
node1.vm.provision "shell", inline: <<-SHELL
yum install git curl wget epel-release sshpass -y
sudo mkdir -m 600 /root/.ssh
echo "password" | passwd --stdin root
sudo sed -i -e 's/DEFROUTE=yes/DEFROUTE=no/g' /etc/sysconfig/network-scripts/ifcfg-eth0
sudo cat <<'EOF' >> /etc/hosts
192.168.10.8 node1
192.168.10.9 node2
EOF
sudo cat <<'EOF' > /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE="eth1"
BOOTPROTO="none"
ONBOOT="yes"
TYPE="Ethernet"
PERSISTENT_DHCLIENT="no"
IPADDR="192.168.10.8"
GATEWAY="192.168.10.1"
dns1="8.8.8.8"
DEFROUTE="yes"
EOF
sudo sed -i -e '$a nameserver=8.8.8.8' /etc/resolv.conf
sudo systemctl restart network
sleep 10
sudo ssh-keyscan -H 192.168.10.8 >> sudo /root/.ssh/known_hosts
sudo ssh-keyscan -H 192.168.10.9 >> sudo /root/.ssh/known_hosts # 設定対象VMを増やす際はssh-keyscan先を追加してください
sudo sed -i -e 's/PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config
systemctl restart sshd
ssh-keygen -t rsa -P '' -f /root/.ssh/id_rsa
sshpass -p password ssh-copy-id -i ~/.ssh/id_rsa.pub -o "StrictHostKeyChecking no" 192.168.10.8
sshpass -p password ssh-copy-id -i ~/.ssh/id_rsa.pub -o "StrictHostKeyChecking no" 192.168.10.9 # 設定対象VMを増やす際はssh-copy-id先を追加して下さい
SHELL
end
end
いつもの通り以下でデプロイです。
Vagrant up
以下で構築対象に入れます。
$ vagrant status
Current machine states:
node2 running (virtualbox)
node1 running (virtualbox)
This environment represents multiple VMs. The VMs are all listed
above with their current state. For more information about a specific
VM, run `vagrant status NAME`.
$
#確認
以下の通りnode1 からnode2にホスト名で、鍵認証のsshができます。
$ vagrant ssh node1
[vagrant@node1 ~]$ sudo su -
[root@node1 ~]# ssh node2
The authenticity of host 'node2 (192.168.10.9)' can't be established.
ECDSA key fingerprint is SHA256:QhUYshVh8feVy4pYNNUHXK2nFMQOKNull8+4Rtqh360.
ECDSA key fingerprint is MD5:2a:97:92:f2:b5:03:89:53:ea:a9:c4:51:08:ef:7c:d8.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'node2' (ECDSA) to the list of known hosts.
[root@node2 ~]#
今回の Vagarantfile
をテンプレにして利用する場合は以下の値を置換してください。
node1 #デプロイVM
node2 #設定対象VM
192.168.10.8 #デプロイVm
192.168.10.9 #設定対象VM
#IPに192.168.10.0/24以外を使用される場合は192.168.10.1も置換が必要
設定対象VMを増やす際にはnode2分をコピーして上記置換部分と、 ssh-keyscan
、 ssh-copy-id
を編集・追記してください。
※node1の下には記載しないでください(ssh-copy-id等が通らなくなります)
~以上~