如何实现从宿主机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
相关产品推荐
相关产品推荐

