Vagrant Ubuntu虚拟机中authorized_keys存在原因、密钥生成方式及ssh-copy-id失败问题咨询
嘿,我来帮你捋清楚这几个问题哈,咱们一个个拆解:
一、虚拟机里authorized_keys中的ssh-rsa密钥是怎么来的?
这个密钥是Vagrant官方预置在ubuntu/focal64镜像盒子里的。Vagrant为了让用户能快速登录默认创建的虚拟机,在制作官方Ubuntu盒子的时候,就预先生成了一对默认的SSH密钥对:
- 公钥直接放在虚拟机内
vagrant用户的~/.ssh/authorized_keys里,就是你看到的那串ssh-rsa AAAAB3NzaC1yc2E************* vagrant - 对应的私钥则会在你执行
vagrant up后,生成在本地项目目录的.vagrant/machines/default/virtualbox/private_key路径下,这也是你能通过指定这个私钥成功SSH登录的原因。
二、为什么ssh-copy-id会失败?
你直接执行ssh-copy-id vagrant@127.0.0.1 -p 2200时,命令默认会尝试用你本地当前用户的SSH密钥(比如~/.ssh/id_rsa)去登录虚拟机,但虚拟机的SSH服务现在只信任那个预置的Vagrant密钥,所以会返回Permission denied (publickey)的错误——相当于你拿了一把虚拟机不认识的钥匙去开门,自然被拒绝啦。
三、怎么解决ssh-copy-id的问题?
要成功把你的本地公钥添加到虚拟机的authorized_keys里,你需要指定Vagrant的私钥作为登录凭证,执行以下命令:
ssh-copy-id -i .vagrant/machines/default/virtualbox/private_key vagrant@127.0.0.1 -p 2200
这样命令会先用Vagrant的私钥登录到虚拟机,再把你本地的公钥(默认是~/.ssh/id_rsa.pub)添加到vagrant用户的authorized_keys中,之后你就可以不用指定私钥,直接通过ssh vagrant@127.0.0.1 -p 2200登录了。
另外,如果你想一劳永逸,也可以修改你的Vagrantfile,添加自动同步本地公钥的配置:
Vagrant.configure("2") do |config| config.vm.box = "ubuntu/focal64" # 同步本地公钥到虚拟机 config.vm.provision "file", source: "~/.ssh/id_rsa.pub", destination: "~/.ssh/authorized_keys" # 修复authorized_keys的权限(SSH对权限要求很严格) config.vm.provision "shell", inline: <<-SHELL chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys SHELL end
修改后执行vagrant reload --provision,虚拟机就会自动完成公钥的配置啦。
备注:内容来源于stack exchange,提问作者MikiBelavista
相关产品推荐
相关产品推荐

