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

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并配置好:

  1. 手动启动你用来制作Box的Windows Server 2016虚拟机,登录系统
  2. 打开管理员权限的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
    
  3. 关闭虚拟机,重新打包成Vagrant Box(替换你原来的Box文件)
  4. 在Vagrantfile中明确指定SSH的登录凭据:
    Vagrant.configure("2") do |config|
      config.vm.box = "你的MS2016自定义box名称"
      
      config.ssh.username = "Administrator"
      config.ssh.password = "你的虚拟机管理员密码"
    end
    
  5. 执行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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:27:16