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.106Too 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
相关推荐
公子小六2 小时前
基于.NET的Windows窗体编程之WinForms数据表格
windows·c#·.net·winforms
阿汤哥的程序之路2 小时前
ProxyJump
ssh
程序员大辉2 小时前
开源LibreOffice(Office办公套件)下载完整安装教程
开发语言·microsoft·c#
糯米团子7492 小时前
蓝桥杯javaB组赛前四天复习-1
java·windows·蓝桥杯
bike兔兔2 小时前
Python实现图片批量重命名+统一改名,简单好用图片整理工具
windows
zhougl9963 小时前
非root用户,链接ssh,并上传git
运维·git·ssh
Hugh-Yu-1301233 小时前
WSL --Ubuntu-24.04-LTS子系统安装教程
linux·windows·ubuntu
私人珍藏库14 小时前
[吾爱大神原创工具] QtScreenSwitcher[Win]一个现代化、极简、高颜值的多屏开关工具。
windows·工具·软件·win·多功能
competes14 小时前
慈善基金投资底层逻辑应用 顶层代码低代码配置平台开发结构方式数据存储模块
java·开发语言·数据库·windows·sql