Windows 安装与配置 OpenSSH Server 操作文档
适用系统: Windows 10(1809 及以上)、Windows 11、Windows Server 2019 及以上。
一、OpenSSH 组件说明
Windows OpenSSH 包含两个独立组件:
| 组件 | 功能 |
|---|---|
| OpenSSH Client | 发起 SSH 连接 |
| OpenSSH Server | 接受远程 SSH 连接 |
如果需要让其他设备通过 SSH 连接当前 Windows,需要安装 OpenSSH Server。
二、安装 OpenSSH Server
2.1 检查 Windows 版本
按 Win + R,输入:
winver
2.2 以管理员身份打开 PowerShell
右键开始菜单,选择「终端(管理员)」或「Windows PowerShell(管理员)」。
检查当前是否具有管理员权限:
(New-Object Security.Principal.WindowsPrincipal(
[Security.Principal.WindowsIdentity]::GetCurrent()
)).IsInRole(
[Security.Principal.WindowsBuiltInRole]::Administrator
)
返回 True 表示具有管理员权限。
2.3 检查 OpenSSH 安装状态
Get-WindowsCapability -Online |
Where-Object Name -like 'OpenSSH*'
可能得到:
Name : OpenSSH.Client~~~~0.0.1.0
State : Installed
Name : OpenSSH.Server~~~~0.0.1.0
State : NotPresent
其中:
Installed:已经安装。NotPresent:尚未安装。
2.4 安装 OpenSSH Server
Add-WindowsCapability -Online `
-Name OpenSSH.Server~~~~0.0.1.0
如果还没有安装 Client,可以额外执行:
Add-WindowsCapability -Online `
-Name OpenSSH.Client~~~~0.0.1.0
正常情况下返回:
Path :
Online : True
RestartNeeded : False
2.5 GUI 安装方式
也可以通过 Windows 设置安装:
- 打开「设置」。
- 进入「系统 → 可选功能」。
- 点击「查看功能」。
- 搜索
OpenSSH Server。 - 选择安装。
三、启动 SSH 服务
3.1 启动服务
管理员 PowerShell 执行:
Start-Service sshd
3.2 设置开机自动启动
Set-Service -Name sshd -StartupType Automatic
3.3 检查服务状态
Get-Service sshd
正常结果:
Status Name DisplayName
------ ---- -----------
Running sshd OpenSSH SSH Server
如果服务状态是 Stopped:
Start-Service sshd
如果启动失败,需要进一步检查配置和事件日志。
四、配置 Windows 防火墙
安装 OpenSSH Server 时,Windows 通常会自动创建 TCP 22 入站防火墙规则。
4.1 检查防火墙规则
Get-NetFirewallRule -Name OpenSSH-Server-In-TCP
重点检查:
| 字段 | 预期值 |
|---|---|
| Enabled | True |
| Direction | Inbound |
| Action | Allow |
| Profile | Any |
4.2 如果防火墙规则不存在
手动创建:
New-NetFirewallRule `
-Name OpenSSH-Server-In-TCP `
-DisplayName "OpenSSH SSH Server (sshd)" `
-Enabled True `
-Direction Inbound `
-Protocol TCP `
-Action Allow `
-LocalPort 22
4.3 检查端口监听
Get-NetTCPConnection -LocalPort 22 -State Listen
正常情况下可以看到:
LocalAddress LocalPort State
------------ --------- -----
:: 22 Listen
0.0.0.0 22 Listen
也可以使用:
netstat -ano | findstr ":22"
注意检查 LISTENING 状态。
五、SSH 连接与功能测试
5.1 获取 Windows 用户名
在目标 Windows 上执行:
whoami
例如:
DESKTOP-568PO35\admin
如果是本地账户,通常可以使用 admin 作为 SSH 用户名。
5.2 获取 Windows IP 地址
ipconfig
找到当前使用的网卡 IPv4 地址,例如:
192.168.1.100
5.3 测试本机 SSH 连接
ssh localhost
首次连接会提示确认服务器 Host Key:
The authenticity of host 'localhost' can't be established.
Are you sure you want to continue connecting (yes/no)?
确认服务器指纹可信后输入:
yes
随后输入 Windows 账户密码。
注意:输入密码时,终端不会显示字符或星号,这是正常现象。
5.4 从其他机器连接
Linux / macOS:
ssh admin@192.168.1.100
Windows:
ssh admin@192.168.1.100
指定端口:
ssh -p 22 admin@192.168.1.100
5.5 测试远程命令执行
ssh admin@192.168.1.100 "whoami"
5.6 测试 SFTP
sftp admin@192.168.1.100
进入交互界面后执行:
pwd
ls
mkdir test
put test.txt
get test.txt
exit
5.7 测试端口连通性
在另一台 Windows 机器上:
Test-NetConnection 192.168.1.100 -Port 22
重点查看:
TcpTestSucceeded : True
这表示 TCP 连接可以建立,但不代表 SSH 身份认证已经成功。
六、配置默认 Shell
Windows OpenSSH 默认使用 CMD(命令提示符),也可以修改为 PowerShell。
6.1 查看当前配置
Get-ItemProperty `
-Path "HKLM:\SOFTWARE\OpenSSH" `
-Name DefaultShell `
-ErrorAction SilentlyContinue
如果没有该配置项,通常使用默认 CMD。
6.2 修改为 PowerShell
管理员 PowerShell 执行:
New-ItemProperty `
-Path "HKLM:\SOFTWARE\OpenSSH" `
-Name DefaultShell `
-Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" `
-PropertyType String `
-Force
重启服务:
Restart-Service sshd
断开 SSH 后重新连接即可。
6.3 修改为 CMD
Set-ItemProperty `
-Path "HKLM:\SOFTWARE\OpenSSH" `
-Name DefaultShell `
-Value "C:\Windows\System32\cmd.exe"
然后:
Restart-Service sshd
七、OpenSSH 配置文件
Windows OpenSSH Server 的主要配置目录:
C:\ProgramData\ssh\
主要文件:
| 文件 | 作用 |
|---|---|
sshd_config | SSH 服务端配置 |
ssh_host_rsa_key | RSA 主机私钥 |
ssh_host_ecdsa_key | ECDSA 主机私钥 |
ssh_host_ed25519_key | Ed25519 主机私钥 |
administrators_authorized_keys | 管理员账户公钥文件 |
SSH 服务端配置文件:
C:\ProgramData\ssh\sshd_config
常用配置:
Port 22
PubkeyAuthentication yes
PasswordAuthentication yes
Subsystem sftp sftp-server.exe
注意:以上只是常用配置示例,不需要为了安装 SSH 而覆盖系统默认配置。
修改配置后,先检查语法:
sshd -t
如果没有输出,通常表示配置语法检查通过。
然后重启:
Restart-Service sshd
八、常见问题与错误处理
8.1 安装失败:Add-WindowsCapability 报错
现象:
Add-WindowsCapability : The operation failed
或者:
Error: 0x800f0954
可能原因:
- Windows Update 无法访问。
- 机器使用 WSUS,策略限制了可选功能下载。
- Windows Feature on Demand 下载源不可用。
- Windows 组件存储存在问题。
处理方法:
检查系统组件:
DISM /Online /Cleanup-Image /CheckHealth
检查 Windows Update 服务:
Get-Service wuauserv
如果确认是组件存储问题,可以执行:
DISM /Online /Cleanup-Image /RestoreHealth
然后重新尝试安装:
Add-WindowsCapability -Online `
-Name OpenSSH.Server~~~~0.0.1.0
如果机器使用 WSUS,需要检查组策略中的可选组件安装和修复内容下载源设置,必要时使用与当前 Windows 版本匹配的 Features on Demand 安装源。
8.2 SSH 连接失败:Connection refused
现象:
ssh: connect to host 192.168.1.100 port 22:
Connection refused
排查顺序:
第一步:检查服务。
Get-Service sshd
第二步:检查监听端口。
Get-NetTCPConnection -LocalPort 22 -State Listen
第三步:检查防火墙。
Get-NetFirewallRule -Name OpenSSH-Server-In-TCP
第四步:检查是否有其他程序占用了 22 端口。
netstat -ano | findstr ":22"
如果没有 LISTENING,说明没有程序在对应地址和端口监听。
8.3 SSH 连接超时:Connection timed out
现象:
ssh: connect to host 192.168.1.100 port 22:
Connection timed out
常见原因:
- 客户端和服务端不在同一个网络。
- Windows 防火墙阻止连接。
- 路由器没有配置端口转发。
- NAT 或网络隔离导致无法直连。
- 连接的 IP 地址错误。
客户端执行:
Test-NetConnection 192.168.1.100 -Port 22
如果:
TcpTestSucceeded : False
说明 TCP 层尚未建立连接。
8.4 SSH 登录失败:Permission denied
现象:
Permission denied, please try again.
可能原因:
- 用户名错误。
- 密码错误。
- Windows 账户没有远程登录权限。
- SSH 服务端禁用了对应认证方式。
- 管理员账户公钥文件权限不正确。
先检查 Windows 用户名:
whoami
检查配置:
notepad C:\ProgramData\ssh\sshd_config
确认对应认证方式是否启用,例如:
PasswordAuthentication yes
PubkeyAuthentication yes
注意:Windows OpenSSH 不支持直接使用 Microsoft Entra ID 账户进行常规 SSH 密码认证,建议使用本地账户或受支持的域账户测试。
8.5 管理员账户公钥认证失败
Windows OpenSSH 对管理员账户有特殊处理。
管理员账户默认使用:
C:\ProgramData\ssh\administrators_authorized_keys
而不是普通用户目录下的:
C:\Users\username\.ssh\authorized_keys
检查文件权限:
icacls.exe `
"C:\ProgramData\ssh\administrators_authorized_keys"
修复权限:
icacls.exe `
"C:\ProgramData\ssh\administrators_authorized_keys" `
/inheritance:r `
/grant "Administrators:F" `
/grant "SYSTEM:F"
8.6 SSH 服务启动失败
检查服务:
Get-Service sshd
检查配置语法:
sshd -t
查看 OpenSSH 事件日志:
Get-WinEvent -LogName "OpenSSH/Operational" -MaxEvents 30 |
Format-List TimeCreated, Id, LevelDisplayName, Message
也可以打开:
事件查看器
└── 应用程序和服务日志
└── OpenSSH
└── Operational
如果事件日志不足以定位问题,可以使用前台调试模式:
sshd.exe -ddd -e -p 2222
注意:该命令会以前台方式运行独立调试实例,使用 2222 端口。测试完成后按 Ctrl+C 退出。
8.7 SFTP 无法使用
现象:
subsystem request failed on channel 0
检查配置文件:
C:\ProgramData\ssh\sshd_config
确认 SFTP Subsystem 配置存在:
Subsystem sftp sftp-server.exe
检查程序是否存在:
Test-Path C:\Windows\System32\OpenSSH\sftp-server.exe
返回 True 表示文件存在。
检查配置语法:
sshd -t
重启:
Restart-Service sshd
重新测试:
sftp admin@192.168.1.100
8.8 修改默认 Shell 后仍然进入 CMD
检查注册表:
Get-ItemProperty `
-Path "HKLM:\SOFTWARE\OpenSSH" `
-Name DefaultShell
检查 PowerShell 是否存在:
Test-Path "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe"
然后重启服务并重新建立 SSH 连接:
Restart-Service sshd
修改默认 Shell 不会改变已经建立的 SSH 会话。
九、日志与诊断
常用诊断命令:
| 目的 | 命令 |
|---|---|
| 检查 SSH 服务 | Get-Service sshd |
| 检查端口 | Get-NetTCPConnection -LocalPort 22 -State Listen |
| 检查防火墙 | Get-NetFirewallRule -Name OpenSSH-Server-In-TCP |
| 检查配置 | sshd -t |
| 检查 SSH 版本 | ssh -V |
| 检查服务事件 | Get-WinEvent -LogName OpenSSH/Operational -MaxEvents 30 |
| 检查网络 | Test-NetConnection IP -Port 22 |
如果需要文件形式的 SSH 日志,可以在 sshd_config 中配置:
SyslogFacility LOCAL0
重启服务后,日志可以写入:
C:\ProgramData\ssh\logs\
Windows OpenSSH 默认通常使用 ETW 事件日志;切换为文件日志后,可以通过日志文件进一步分析认证和连接问题。
十、安全建议
正式部署时,建议:
- 优先使用公钥认证,避免长期保存账户密码。
- 不建议直接向公网开放 TCP 22 端口。
- 使用防火墙限制允许连接的来源 IP。
- 妥善保护 SSH Host Key,避免服务器身份被冒充。
- 仅允许必要的 Windows 账户登录。
- 不要随意修改管理员账户公钥文件权限。
- 不要将 SSH 认证成功等同于获得管理员权限。
- 定期检查 SSH 登录日志,排查异常认证行为。
十一、卸载 OpenSSH
如果以后不再需要 SSH Server:
停止服务:
Stop-Service sshd
禁用自动启动:
Set-Service sshd -StartupType Disabled
卸载 Server:
Remove-WindowsCapability -Online `
-Name OpenSSH.Server~~~~0.0.1.0
如果不再需要 Client:
Remove-WindowsCapability -Online `
-Name OpenSSH.Client~~~~0.0.1.0
删除防火墙规则:
Remove-NetFirewallRule -Name OpenSSH-Server-In-TCP
卸载前应备份需要保留的 SSH 配置、主机密钥和公钥数据。
十二、安装验证清单
| 测试项目 | 预期结果 |
|---|---|
| OpenSSH Server 安装 | 成功 |
| sshd 自动启动 | 成功 |
| TCP 22 监听 | 成功 |
| 防火墙入站规则 | 已启用 |
| 本机 SSH 连接 | 成功 |
| 局域网 SSH 连接 | 成功 |
| 密码认证 | 成功 |
| 公钥认证 | 成功 |
| 远程命令执行 | 成功 |
| CMD 交互 | 成功 |
| PowerShell 交互 | 成功 |
| SFTP 初始化 | 成功 |
| 目录浏览 | 成功 |
| 文件上传下载 | 成功 |
| 大文件传输 | 成功 |
464



被折叠的 条评论
为什么被折叠?



