位于~/.vagrant.d/insecure_private_key
的私钥和与我的Vagrantfile
位于同一目录中的.vagrant/machines/default/virtualbox/private_key
有什么区别?为什么两者兼而有之?如何使用其中之一?
公共盒子与始终相同的insecure key
一起运送,与流浪者一起运送并位于~/.vagrant.d/insecure_private_key
。
这允许流浪者在第一个流浪者上使用ssh。
然后(仍在第一次运行时)流浪者检查配置键config.ssh.insert_key
,如果它设置为true
(这是默认值,它会将其替换为生成的,通常位于<current_directory>/.vagrant/machines/<machine_name>/<provider>/private_key
中。
请注意,目录结构意味着每台计算机和每个提供程序都有一个密钥,因此同一流浪环境中的多台计算机/提供程序最终会使用不同的密钥。
对于这一点,该机器上的每个连接都将使用相同的生成密钥,直到您销毁它,并且该过程将在下一个第一个流浪者中重现。对于大多数用例,此行为是标准和隐式的。
但是,由于可以创建自己的自定义框,因此可以:
- 在框中添加
insecure key
,因此过程与公共框相同。 - 在框中添加自定义公钥,然后将
config.ssh.private_key_path
设置为相应的私钥。
但正如文档所说:
您还可以通过将其设置为数组来指定多个私钥。这很有用,例如,如果您使用默认私钥引导计算机,但稍后可能将其替换为更安全的密钥。
因此,您实际上可以混合这两种行为。
一个常见的用例是,当公司或团队要求(无论出于何种原因)每个用户连接到机器时,都是真正的 ssh 密钥。
一种解决方案是将insecure key
用作默认值,并在第一次向上时切换到用户密钥:
Vagrant.configure(2) do |config|
config.ssh.insert_key = false
config.ssh.private_key_path = [
'~/.ssh/id_rsa',
'~/.vagrant.d/insecure_private_key'
]
config.vm.provision 'file',
source: '~/.ssh/id_rsa.pub',
destination: '~/.ssh/authorized_keys'
end
但是,您也可以将vagrant insecure key
替换为公司/团队的默认密钥,然后以相同的方式与用户特定的密钥swith。
无论如何,当不使用vagrant insecure key
时,必须确保要运行的第一个配置器始终是替换密钥的配置器。
我发现答案很有用,但在我的情况下不起作用,因为默认私钥与框有关。
因此使用了以下内容:
$own_ssh_key = <<-SCRIPT
ssh-keygen -q -t ed25519 -N "" -f .ssh/login_ssh
cp .ssh/login_ssh.pub .ssh/authorized_keys
cp .ssh/login_ssh /vagrant/.
SCRIPT
Vagrant.configure("2") do |config|
config.ssh.private_key_path = [File.expand_path("../login_ssh", __FILE__)] +
Dir.glob("#{Dir.home}/.vagrant.d/boxes/ubuntu-*-kinetic64/*/virtualbox/vagrant_insecure_key")
config.vm.provision "shell", inline: $own_ssh_key, privileged: false
end