Windows 11 OpenSSH Server 完整排错指南(微软账号场景)

背景

Windows 11 台式机(i5-12490F, RTX 3080 20GB),使用微软邮箱账号登录系统(whoami显示admin-pc\admin),需要从Linux笔记本SSH远程连入WSL2 Fedora进行GPU训练测试。


遇到的问题链

1. WSL2网络不通

症状:WSL2 Fedora IP是172.x.x.x(NAT),笔记本无法ping通

原因:WSL2默认使用NAT模式,外部无法直连内部IP

尝试的方案:

  • mirrored模式 → 失败,Win11有本地代理冲突
  • bridged模式 → 需要Hyper-V外部交换机,复杂
  • netsh portproxy端口转发 → 可行但WSL2重启后IP变化

正确方案 :使用Windows自带OpenSSH Server,SSH到Windows后通过wsl命令进入WSL2,绕开WSL2网络问题。

2. SSH认证失败 --- Too many authentication failures

症状 :ssh admin@192.168.101.106 → Too many authentication failures

原因:~/.ssh/目录有多个密钥(id_rsa, id_ecdsa, id_ed25519等),SSH客户端逐个尝试,超过MaxAuthTries限制

修复:

text 复制代码
ssh -o IdentitiesOnly=yes -i ~/.ssh/id_ed25519 admin@192.168.101.106

3. SSH认证失败 --- Permission denied(密码)

症状:密码认证始终失败

原因:Windows微软账号的密码通过SSH无法正常验证(Windows UAC/Microsoft Account机制限制)

修复:改用SSH密钥认证,放弃密码认证。

4. SSH config干扰连接

症状 :kex_exchange_identification: read: Connection reset by peer

原因 :~/.ssh/config中的Host *全局配置(添加了diffie-hellman-group1-sha1和代理设置)干扰连接

修复:

text 复制代码
ssh -F /dev/null -i ~/.ssh/id_ed25519 -o IdentitiesOnly=yes admin@192.168.101.106

5. 公钥认证失败 --- Match Group administrators不匹配

症状 :sshd debug显示 user admin does not match group list administrators at line 87

原因 :Windows默认sshd_config末尾有Match Group administrators块,将管理员用户的authorized_keys重定向到C:\ProgramData\ssh\administrators_authorized_keys。但微软账号的SID无法被正确解析为administrators组成员(get_passwd: lookup_sid() failed: 1332),导致匹配失败。

后果 :sshd回退到查找C:\Users\admin\.ssh\authorized_keys(全局配置路径),但该文件不存在 → 认证失败。

6. sshd服务启动失败

症状 :net start sshd → 错误1067(进程意外终止)或 错误2(找不到文件)

原因:

  • 错误1067:微软账号SID解析失败(1332),sshd在服务模式下崩溃
  • 错误2:使用sc.exe手动重建服务后,缺少原始安装设置的注册表配置(WOW64标记、服务账号权限等)

错误的尝试:

  • sc.exe delete + create重建服务 → 丢失原始安装的服务配置
  • 修改注册表WOW64键 → 无效
  • 修改RequiredPrivileges → 无效
  • 修改服务账号(LocalSystem/NT SERVICE\sshd)→ 无效

正确的完整解决方案

Step 1: 彻底卸载OpenSSH Server

text 复制代码
Remove-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

Step 2: 重命名旧配置目录(关键!)

text 复制代码
Rename-Item -Path "C:\ProgramData\ssh" -NewName "ssh_backup_$(Get-Date -Format yyyyMMdd_HHmmss)"

为什么关键:旧目录残留的权限配置会污染新安装,导致服务无法启动。

Step 3: 重启计算机

释放所有服务句柄和缓存。

Step 4: 重新安装并启动

text 复制代码
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
Start-Service sshd
Set-Service -Name sshd -StartupType Automatic

Step 5: 修改sshd_config适配微软账号

text 复制代码
$configPath = "C:\ProgramData\ssh\sshd_config"
$content = Get-Content $configPath -Raw
$content = $content -replace '(?m)^#PubkeyAuthentication yes', 'PubkeyAuthentication yes'
$content = $content -replace '(?m)^#PasswordAuthentication yes', 'PasswordAuthentication yes'
$content = $content -replace '(?m)^Match Group administrators', '#Match Group administrators'
$content = $content -replace '(?m)^\s+AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys', '#       AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys'
$content | Out-File -FilePath $configPath -Encoding utf8 -Force
Restart-Service sshd

Step 6: 配置SSH密钥认证

text 复制代码
mkdir $env:USERPROFILE\.ssh -Force
Add-Content -Path $env:USERPROFILE\.ssh\authorized_keys -Value "ssh-ed25519 AAAA... your_public_key"

Step 7: 客户端连接

text 复制代码
ssh -F /dev/null -i ~/.ssh/id_ed25519 -o IdentitiesOnly=yes admin@192.168.101.106
# 进入WSL2
wsl nvidia-smi

核心教训

  1. 微软账号是万恶之源 :Windows OpenSSH对微软账号的SID解析有缺陷,Match Group administrators块无法正确匹配 → 必须注释掉
  2. 不要用sc.exe手动重建服务:Add-WindowsCapability安装时设置了大量隐式配置(权限、虚拟账号、安全策略),sc.exe create无法复制
  3. 重装前必须清理旧数据目录 :C:\ProgramData\ssh\残留权限会导致新安装失败
  4. 重启是必要步骤:Windows服务句柄缓存不会自动释放

诊断命令备忘

text 复制代码
# sshd debug模式运行(查看认证过程)
cmd /c "C:\WINDOWS\System32\OpenSSH\sshd.exe -d -f C:\ProgramData\ssh\sshd_config"

# 客户端verbose模式
ssh -vvv -F /dev/null admin@192.168.101.106

# 查看服务状态和注册表
sc.exe query sshd
reg query "HKLM\SYSTEM\CurrentControlSet\Services\sshd" /s

# 查看事件日志
wevtutil qe System /c:10 /rd:true /f:text /q:"*[System[Provider[@Name='Service Control Manager'] and EventID=7000]]"
Get-WinEvent -LogName "OpenSSH/Operational" -MaxEvents 10
相关推荐
艺杯羹19 小时前
Windows原生软件锁设计:从暴力杀进程丢数据到零轮询事件驱动架构
windows·系统架构·开源·开源软件·内存管理·开源协议
csdn_aspnet1 天前
Redis 入门:Windows、Mac安装指南
数据库·windows·redis·缓存·mac
没差c2 天前
winsw将jar、nginx等注册为Windows服务
windows·nginx·jar
光谱SpectrAI2 天前
Claude Code 2.1.318 的隐私模块:4 条命令,拦了 2 条
windows
Hello_Pyhx2 天前
NWinfo 导出 Windows 硬件信息:从 JSON 报告到缺项排查
windows·json
解决问题no解决代码问题3 天前
日志脱敏双链路统一优化:从两套枚举到单一规则源,兼顾安全与可维护性
microsoft
百事牛科技3 天前
Excel的三种密码:防看、防存、防乱改,各管各的
windows·excel
Dovis(誓平步青云)3 天前
启元 T1 Pro 人机相声搭档:语音-触摸双通道的启元机器人节奏引擎设计
开发语言·前端·javascript·microsoft·交互
宝桥南山3 天前
.NET 11 - 尝试一下Blazor中的新特性SupplyParameterFromTempData
microsoft·微软·c#·asp.net·.net·.netcore
程序员初一4 天前
8080 打不开的四层定位:监听地址、ufw、DOCKER 链、安全组
linux·ssh