Vagrant で共通の秘密鍵を使用する

1. はじめに

Vagrant では仮想マシンごとに秘密鍵が生成される。が、同じ鍵を利用したい。

確認した環境はこちら

windows
$ ver

Microsoft Windows [Version 10.0.18363.778]

$ vagrant -v
Vagrant 2.2.6
mac
$ sw_vers
ProductName:    macOS
ProductVersion: 11.0.1
BuildVersion:   20B50

$ vagrant -v
Vagrant 2.2.9

2. 仮想マシンごとの秘密鍵を利用(デフォルト)

まずは、通常の仮想マシンごとに秘密鍵が作られる状態を確認しておく。

Vagrantfile を以下のようにして仮想マシンが2台作られるようにする。

Vagrantfile
 1Vagrant.configure("2") do |config|
 2  config.vm.box = "centos/7"
 3
 4  (0..1).each do |i|
 5    config.vm.define "server#{i}" do |node|
 6      node.vm.hostname = "server#{i}"
 7    end
 8  end
 9end

ssh-config を見る。

ssh-config出力
$ vagrant ssh-config
Host server0
  HostName 127.0.0.1
  User vagrant
  Port 2203
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile C:/projects/vagrant-vm/ansible-playground/.vagrant/machines/server0/virtualbox/private_key
  IdentitiesOnly yes
  LogLevel FATAL

Host server1
  HostName 127.0.0.1
  User vagrant
  Port 2204
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile C:/projects/vagrant-vm/ansible-playground/.vagrant/machines/server1/virtualbox/private_key
  IdentitiesOnly yes
  LogLevel FATAL

IdentityFile を見るとそれぞれの仮想マシンごとに秘密鍵が作られている。

macの場合も同じ。

ssh-config出力
$ vagrant ssh-config
Host server0
  HostName 127.0.0.1
  User vagrant
  Port 2200
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile /Users/siwa32/projects/vagrant_test/test1/.vagrant/machines/server0/virtualbox/private_key
  IdentitiesOnly yes
  LogLevel FATAL

Host server1
  HostName 127.0.0.1
  User vagrant
  Port 2201
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile /Users/siwa32/projects/vagrant_test/test1/.vagrant/machines/server1/virtualbox/private_key
  IdentitiesOnly yes
  LogLevel FATAL

3. 共通の秘密鍵を利用

先ほどの例に、同じ秘密鍵を使用されるように変更してみる。

config.ssh.insert_key = false にすることにより全ての仮想マシンで同じ秘密鍵を使用することができる。

Vagrantfile
 1Vagrant.configure("2") do |config|
 2  config.vm.box = "centos/7"
 3  config.ssh.insert_key = false (1)
 4
 5  (0..1).each do |i|
 6    config.vm.define "server#{i}" do |node|
 7      node.vm.hostname = "server#{i}"
 8    end
 9  end
10end
1 : falseに設定することで同じ鍵を使うようになる

ssh-config で確認してみるとそれそれの仮想マシンで IdentityFile が同じファイルとなっている。

秘密鍵の場所はユーザディレクトリの .vagrant.d ディレクトリにある insecure_private_key ファイルとなる。

ssh-config出力
$ vagrant ssh-config
Host server0
  HostName 127.0.0.1
  User vagrant
  Port 2203
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile C:/Users/siwa32/.vagrant.d/insecure_private_key
  IdentitiesOnly yes
  LogLevel FATAL

Host server1
  HostName 127.0.0.1
  User vagrant
  Port 2204
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile C:/Users/siwa32/.vagrant.d/insecure_private_key
  IdentitiesOnly yes
  LogLevel FATAL

macの場合もユーザディレクトリの .vagrant.d ディレクトリにある insecure_private_key ファイルとなる。

 vagrant ssh-config
Host server0
  HostName 127.0.0.1
  User vagrant
  Port 2200
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile /Users/siwa32/.vagrant.d/insecure_private_key
  IdentitiesOnly yes
  LogLevel FATAL

Host server1
  HostName 127.0.0.1
  User vagrant
  Port 2201
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile /Users/siwa32/.vagrant.d/insecure_private_key
  IdentitiesOnly yes
  LogLevel FATAL