为什么流浪者使用 2 个 ssh 私钥?



位于~/.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中。

请注意,目录结构意味着每台计算机和每个提供程序都有一个密钥,因此同一流浪环境中的多台计算机/提供程序最终会使用不同的密钥。

对于这一点,该机器上的每个连接都将使用相同的生成密钥,直到您销毁它,并且该过程将在下一个第一个流浪者中重现。对于大多数用例,此行为是标准和隐式的。

但是,由于可以创建自己的自定义框,因此可以:

  1. 在框中添加insecure key,因此过程与公共框相同。
  2. 在框中添加自定义公钥,然后将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

最新更新