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