使用libvirt启动Arch Vagrant Box时SSH验证失败致vagrant up挂起
Vagrant + Libvirt启动Arch Linux镜像SSH验证挂起问题解决
问题背景
使用Vagrant的libvirt provider启动archlinux/archlinux镜像时,vagrant up会卡在「等待SSH可用」阶段,但新开窗口执行vagrant ssh能正常建立会话。通过vagrant up --debug查看日志,发现SSH验证失败,提示could not connect to ssh-agent: Agent not configured(但ssh-agent已正常运行),尝试none和publickey认证均失败。已尝试eval $(ssh-agent) -s启动代理并执行ssh-add、添加自定义公钥等操作,均无效果。
原Vagrantfile配置:
Vagrant.configure("2") do |config| config.vm.box = "archlinux/archlinux" config.vm.provider :libvirt do |domain| domain.memory = 2048 domain.cpus = 4 end end
可行解决方案
方案1:强制使用密码认证
Arch Linux官方Vagrant镜像默认启用密码登录(默认密码为vagrant),在Vagrantfile中添加SSH配置,强制使用密码认证跳过密钥和agent问题:
Vagrant.configure("2") do |config| config.vm.box = "archlinux/archlinux" config.vm.provider :libvirt do |domain| domain.memory = 2048 domain.cpus = 4 end # 指定SSH用户名、密码,禁用自动替换密钥 config.ssh.username = "vagrant" config.ssh.password = "vagrant" config.ssh.insert_key = false end
insert_key = false会阻止Vagrant尝试替换镜像默认密钥,避免破坏原有SSH认证配置。
方案2:直接指定Vagrant内置私钥路径
Vagrant官方镜像通用内置私钥,archlinux/archlinux已预先配置对应公钥,直接指定该密钥路径即可:
Vagrant.configure("2") do |config| config.vm.box = "archlinux/archlinux" config.vm.provider :libvirt do |domain| domain.memory = 2048 domain.cpus = 4 end # 指定Vagrant内置私钥 config.ssh.private_key_path = "~/.vagrant.d/insecure_private_key" end
方案3:禁用SSH Agent转发
部分环境下Agent转发会导致Vagrant识别异常,禁用后可绕过agent相关问题:
Vagrant.configure("2") do |config| config.vm.box = "archlinux/archlinux" config.vm.provider :libvirt do |domain| domain.memory = 2048 domain.cpus = 4 end # 禁用SSH Agent转发 config.ssh.forward_agent = false end
修改配置后执行vagrant destroy -f && vagrant up重新创建虚拟机即可。
内容的提问来源于stack exchange,提问作者Or Karni
相关产品推荐
相关产品推荐

