如何将我自己的公钥添加到Vagrant VM?
添加一个ssh密钥给Vagrant虚拟机时遇到问题。 基本上我在这里的设置工作正常。 一旦虚拟机创build,我可以通过vagrant ssh
访问它们,用户“vagrant”存在,并且在authorized_keys
文件中有一个用户ssh密钥。
我现在想要做的是:能够通过ssh
连接到这些虚拟机或使用scp
。 所以我只需要将我的公钥从id_rsa.pub
添加到authorized_keys
– 就像我使用ssh-copy-id
。
有没有办法告诉stream浪者在安装过程中我的公钥应该包含在内? 如果没有(这可能是根据我的谷歌结果),是否有一种方法可以很容易地追加我的公钥在stream浪安装?
复制所需的公钥将直接进入configuration阶段。 确切的答案取决于你想用什么configuration(壳,厨师,木偶等)。 最琐碎的将是一个关键的file
提供者,这样的事情:
config.vm.provision "file", source: "~/.ssh/id_rsa.pub", destination: "~/.ssh/me.pub"
那么,实际上你需要附加到authorized_keys,使用真正的configuration,像Puppet 。 例如,请参阅使用Puppetpipe理SSH授权密钥 。
您可以使用Ruby的核心文件模块,如下所示:
config.vm.provision "shell" do |s| ssh_pub_key = File.readlines("#{Dir.home}/.ssh/id_rsa.pub").first.strip s.inline = <<-SHELL echo #{ssh_pub_key} >> /home/vagrant/.ssh/authorized_keys echo #{ssh_pub_key} >> /root/.ssh/authorized_keys SHELL end
这个工作示例将~/.ssh/id_rsa.pub
附加到vagrant和root用户的~/.ssh/authorized_keys
中,这将允许您使用现有的SSH密钥。
有一个更“优雅”的方式来完成你想要做的事情。 您可以find现有的私钥并使用它,而不是经历添加公钥的麻烦。
像这样继续查看现有私钥的path(请看下面的IdentityFile ):
跑
stream浪的ssh-config
结果:
$ vagrant ssh-config 主机magento2.vagrant150 HostName 127.0.0.1 用户stream浪者 港口3150 UserKnownHostsFile / dev / null StrictHostKeyChecking no PasswordAuthentication no IdentityFile“/Users/madismanni/m2/vagrant-magento/.vagrant/machines/magento2.vagrant150/virtualbox/private_key” 身份只有是的 LogLevel致命
然后你可以使用这样的私钥,还要注意closures密码validation的开关
ssh -i /Users/madismanni/m2/vagrant-magento/.vagrant/machines/magento2.vagrant150/virtualbox/private_key -o PasswordAuthentication = no vagrant@127.0.0.1 -p 3150
我最终使用如下代码:
config.ssh.forward_agent = true config.ssh.insert_key = false config.ssh.private_key_path = ["~/.vagrant.d/insecure_private_key","~/.ssh/id_rsa"] config.vm.provision :shell, privileged: false do |s| ssh_pub_key = File.readlines("#{Dir.home}/.ssh/id_rsa.pub").first.strip s.inline = <<-SHELL echo #{ssh_pub_key} >> /home/$USER/.ssh/authorized_keys sudo bash -c "echo #{ssh_pub_key} >> /root/.ssh/authorized_keys" SHELL end
请注意,我们不应该硬编码到/home/vagrant/.ssh/authorized_keys
path,因为一些stream浪的方块不使用vagrant
用户名。
一个更短,更正确的代码应该是:
ssh_pub_key = File.readlines("#{Dir.home}/.ssh/id_rsa.pub").first.strip config.vm.provision 'shell', inline: "echo #{ssh_pub_key} >> /root/.ssh/authorized_keys" config.vm.provision 'shell', inline: "echo #{ssh_pub_key} >> /home/vagrant/.ssh/authorized_keys", privileged: false
否则,用户的.ssh/authorized_keys
将属于root用户。
不过每次运行都会增加一条线,但是Vagrant用于testing,虚拟机的寿命通常很短,所以不是一个大问题。
这是一个很好的线索,帮助我解决了原始海报描述的类似情况。
尽pipe我最终使用了smartwjw答案中提供的设置/逻辑,但是由于我使用VAGRANT_HOME
环境variables将vagrant.d
目录的核心内容保存在我的开发系统的外部硬盘驱动器上,所以遇到了困难。
所以这里是我在Vagrantfile中使用的调整代码,以适应VAGRANT_HOME
环境variables的设置; “魔术”发生在这一行vagrant_home_path = ENV["VAGRANT_HOME"] ||= "~/.vagrant.d"
:
config.ssh.insert_key = false config.ssh.forward_agent = true vagrant_home_path = ENV["VAGRANT_HOME"] ||= "~/.vagrant.d" config.ssh.private_key_path = ["#{vagrant_home_path}/insecure_private_key", "~/.ssh/id_rsa"] config.vm.provision :shell, privileged: false do |shell_action| ssh_public_key = File.readlines("#{Dir.home}/.ssh/id_rsa.pub").first.strip shell_action.inline = <<-SHELL echo #{ssh_public_key} >> /home/$USER/.ssh/authorized_keys SHELL end