You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vagrant Ubuntu虚拟机中authorized_keys存在原因、密钥生成方式及ssh-copy-id失败问题咨询

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 13:58:13