Vagrant执行vagrant up时卡在SSH auth method: password问题求助
解决Vagrant启动Windows Server 2016虚拟机卡在"SSH auth method: password"的问题
我之前也碰到过一模一样的情况,核心原因是Vagrant默认依赖SSH与虚拟机通信,但Windows Server 2016标准版默认并没有预装并启用SSH服务——所以Vagrant一直在尝试通过SSH做密码认证,但根本连不上SSH端口,就卡在那儿了。而你能手动登录虚拟机,说明系统本身启动是正常的,只是Vagrant的通信通道没打通。
下面是几个可行的解决方案,按推荐程度排序:
方案1:改用WinRM作为通信协议(最适合Windows环境)
Windows原生支持WinRM(Windows远程管理)协议,比SSH更适配Windows Server系统。你只需要修改Vagrantfile,指定使用WinRM通信:
Vagrant.configure("2") do |config| config.vm.box = "你的MS2016自定义box名称" # 切换到WinRM通信 config.vm.communicator = "winrm" # 设置WinRM的登录凭据(和你手动登录虚拟机的账号一致) config.winrm.username = "Administrator" config.winrm.password = "你的虚拟机管理员密码" # 可选:指定WinRM端口(默认5985是HTTP端口,5986是HTTPS) config.winrm.port = 5985 end
修改后保存文件,执行vagrant reload重启虚拟机,Vagrant应该就能正常连接,不会再卡在SSH认证步骤了。你也可以用vagrant winrm命令测试连接是否正常:
vagrant winrm -c "Get-ComputerInfo"
方案2:在自定义Box中预装并启用SSH服务
如果你坚持要用SSH通信,需要先在制作Box的源虚拟机中安装OpenSSH Server并配置好:
- 手动启动你用来制作Box的Windows Server 2016虚拟机,登录系统
- 打开管理员权限的PowerShell,执行以下命令安装并启用SSH服务:
# 安装OpenSSH Server组件 Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0 # 设置SSH服务开机自启并启动服务 Set-Service -Name sshd -StartupType 'Automatic' Start-Service sshd # 允许防火墙通过SSH端口(默认22) New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH SSH Server' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22 - 关闭虚拟机,重新打包成Vagrant Box(替换你原来的Box文件)
- 在
Vagrantfile中明确指定SSH的登录凭据:Vagrant.configure("2") do |config| config.vm.box = "你的MS2016自定义box名称" config.ssh.username = "Administrator" config.ssh.password = "你的虚拟机管理员密码" end - 执行
vagrant up,这次应该能通过SSH正常连接了。
方案3:检查Box打包时的元数据
如果你的Box打包时没有正确标记系统类型,Vagrant可能会用默认的Linux配置来处理,导致SSH连接异常。打包Box时可以添加元数据文件metadata.json,指定系统为Windows:
{ "name": "你的box名称", "description": "Windows Server 2016 Standard", "os": "windows", "version": "1.0.0" }
打包命令参考:
vagrant package --base "你的VirtualBox虚拟机名称" --output "ms2016-standard.box" --include metadata.json
这样Vagrant会自动识别这是Windows系统,适配对应的通信方式。
内容的提问来源于stack exchange,提问作者MyDaftQuestions
相关产品推荐
相关产品推荐

