必须正确配置OpenSSH Server服务,否则连接被拒绝或认证失败;需确认系统为Win10 1809+/Win11/Server 2019+,以管理员身份运行PowerShell,执行Add-WindowsCapability安装服务,Start-Service启动并Set-Service设为自动,New-NetFirewallRule放行22端口,可选配置DefaultShell为PowerShell。

要在Windows上让其他设备通过SSH协议安全远程执行命令、传输文件或管理会话,必须正确配置OpenSSH Server服务,否则连接会直接被拒绝或认证失败。
确认系统兼容性与管理员权限
打开“运行”(Win+R),输入winver回车,确认系统版本为 Windows 10 1809 或更高、Windows 11、Windows Server 2019 及以上。低于此版本的系统不内置OpenSSH Server,需手动部署第三方版本。
右键“开始”→“Windows PowerShell(管理员)”,若弹出UAC提示,点“是”。【未以管理员身份运行会导致后续所有安装和启动命令失败】
在PowerShell中执行:
```powershell
(New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent())).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
```
返回True才表示当前具备足够权限。
安装OpenSSH Server(推荐PowerShell方式)
方法一:使用Add-WindowsCapability(适用于联网且未受WSUS/组策略限制的环境)
执行以下命令检查已安装项:Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'
若输出中无OpenSSH.Server~~~~0.0.1.0且状态为NotPresent,则执行安装:Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
方法二:使用“可选功能”图形界面(适合不熟悉命令行的用户)
设置 → 应用 → 可选功能 → 查看功能 → 搜索“OpenSSH” → 勾选OpenSSH 服务器(注意不是“客户端”)→ 下一步 → 重启电脑(部分系统要求)。
⚠️若执行Add-WindowsCapability报错0x800F0954或0x8024402C,说明系统无法从Windows Update获取安装包,此时必须改用GitHub官方.zip包手动部署,或启用本地安装源。
启动并持久化sshd服务
第一步:启动服务Start-Service sshd
第二步:设为开机自启Set-Service -Name sshd -StartupType Automatic
第三步:验证服务状态Get-Service sshd
确保Status为Running,StartType为Automatic。
让 Windows 桌面程序在开机时静默自启并隐藏到系统托盘。特别适用于 Flutter、Electron 等无视 VBS/ProcessStartInfo 窗口样式、难以隐藏的顽固应用。提供「VBS 启动器 + Python ctypes/Win32 API」的隐藏窗口方案,可稳定把窗口收进托盘且不闪控制台。
如果启动失败且提示“服务未响应控制功能”,大概率是sshd_config配置错误或端口被占用;此时先运行sshd -t检测配置语法,再查Get-EventLog -LogName Application -Source sshd -Newest 10定位具体错误。
放行防火墙22端口
PowerShell中直接运行以下命令创建入站规则:New-NetFirewallRule -Name 'OpenSSH-Server-In-TCP' -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
该命令会覆盖系统可能遗漏的默认规则。若此前已存在同名规则,会报错“规则已存在”,可忽略。
验证是否生效:在另一台机器执行telnet 本机IP 22,能出现空白响应即表示端口可达;若提示“无法连接到远程主机”,说明防火墙或路由器仍未放行。
配置默认Shell为PowerShell(可选但强烈建议)
Windows默认SSH登录后进入cmd.exe,体验差且不支持现代脚本语法。执行以下命令将默认Shell切换为PowerShell:$params = @{ Path = "HKLM:\SOFTWARE\OpenSSH"; Name = "DefaultShell"; Value = "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe"; PropertyType = "String"; Force = $true }; New-ItemProperty @params
此操作无需重启服务,新SSH会话立即生效。注意路径必须完整准确,少一个反斜杠或拼写错误都将导致登录后黑屏或断连。
如需恢复cmd,只需删除注册表项:Remove-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell










