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

如何实现从宿主机SSH连接到所有5台Vagrant虚拟机?

如何实现从宿主机SSH连接到所有5台Vagrant虚拟机?

看起来你遇到的问题是Vagrant默认的SSH认证机制导致的——Vagrant会自带一套不安全的密钥对来让vagrant ssh命令正常工作,但你宿主机的个人公钥并没有被添加到虚拟机的authorized_keys文件里,所以直接用IP连接就会被拒绝。下面给你几个可行的解决办法:

方法一:手动将宿主机公钥添加到所有虚拟机

这种方法适合快速解决现有VM的连接问题,不用修改配置文件:

  • 先在宿主机上复制你的公钥内容(或者直接用命令批量追加),比如对每台VM执行这条命令:
    cat ~/.ssh/id_rsa.pub | vagrant ssh master-1 -c "cat >> ~/.ssh/authorized_keys"
    
    把命令里的master-1换成master-2、master-3、node-1、node-2,依次执行一遍就行。
  • 执行完后记得检查虚拟机里~/.ssh/authorized_keys的权限,确保是600,所有者是vagrant,不然SSH可能还是会拒绝:
    vagrant ssh master-1 -c "chmod 600 ~/.ssh/authorized_keys && chown vagrant:vagrant ~/.ssh/authorized_keys"
    

方法二:修改Vagrantfile自动添加公钥(推荐)

如果以后还要创建新的VM,或者想避免手动操作,可以修改Vagrantfile,让VM在创建或provision时自动把你的宿主机公钥加进去:
打开你的Vagrantfile,添加一段shell provision脚本:

Vagrant.configure("2") do |config|
  # 保留你原来的VM配置(比如master-1、master-3这些的定义)

  # 自动将宿主机公钥添加到所有VM的authorized_keys中
  config.vm.provision "shell", inline: <<-SHELL
    echo "#{File.read(File.expand_path("~/.ssh/id_rsa.pub"))}" >> /home/vagrant/.ssh/authorized_keys
    chmod 600 /home/vagrant/.ssh/authorized_keys
    chown vagrant:vagrant /home/vagrant/.ssh/authorized_keys
  SHELL
end

然后执行vagrant provision,让现有VM应用这个配置;以后新创建的VM会自动完成公钥添加。

方法三:利用Vagrant的ssh-config简化连接(无需添加自己的公钥)

如果你不想修改VM的密钥配置,也可以直接把Vagrant生成的SSH配置导入到你宿主机的SSH配置里,这样直接用VM名称就能连接:

  • 执行这条命令,把Vagrant的SSH配置写入你宿主机的~/.ssh/config:
    vagrant ssh-config >> ~/.ssh/config
    
  • 之后你直接用ssh master-1、ssh node-2这样的命令就能连接,不用输入IP和用户名,本质上还是用Vagrant的默认密钥,但操作和原生SSH一样方便。

备注:内容来源于stack exchange,提问作者MikiBelavista

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 15:38:08