在Windows系统管理的日常工作中,远程管理服务器是一项高频且关键的操作。传统的远程桌面协议(RDP)虽然直观,但在安全性、自动化以及资源消耗方面存在天然的短板。相比之下,OpenSSH 作为一款基于 SSH 协议的开源连接工具,能够加密客户端与服务器之间的所有流量,有效遏止窃听、连接劫持等网络攻击。
好消息是,从 Windows Server 2019 和 Windows 10(内部版本 1809) 开始,OpenSSH 服务器已作为可选功能直接集成在操作系统之中。这意味着我们无需再依赖第三方工具,就能在 Windows 生态中原生地搭建起安全、标准的远程管理通道。
本文将手把手带你完成 Windows OpenSSH 服务器的安装与配置,并配置秘钥验证,彻底告别密码登录的安全隐患。
一、环境准备与先决条件
在动手之前,请确保你的环境满足以下条件:
- 操作系统版本:Windows Server 2019 / 2022 / 2025 或 Windows 10 / 11(1809 及以上版本)
- PowerShell 5.1 或更高版本
- 当前账户属于 内置 Administrators 组
你可以通过以下 PowerShell 命令快速检查环境状态:
# 查看 Windows 版本
winver.exe
# 查看 PowerShell 版本
$PSVersionTable.PSVersion
# 检查是否为管理员
(New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent())).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
如果输出为 True,说明你拥有足够的权限进行后续操作。
二、安装 OpenSSH 服务器与客户端
Windows 提供了两种安装方式:图形界面(GUI)和 PowerShell 命令行。下面分别介绍。
方式一:通过“可选功能”GUI 安装
- 点击 “开始”,搜索 “可选功能” 并打开。
- 点击页面顶部的 “查看功能”(或 “添加功能”)。
- 分别搜索 OpenSSH 客户端 和 OpenSSH 服务器,点击 “添加” 进行安装。
- 安装完成后,按
Win + R,输入services.msc打开服务管理控制台。 - 找到 OpenSSH SSH Server 服务,双击打开属性。
- 将 “启动类型” 设置为 “自动”,然后点击 “启动” 按钮启动服务。
注意:安装 OpenSSH 服务器会自动创建名为
OpenSSH-Server-In-TCP的防火墙规则,开放 端口 22 用于入站 SSH 流量。如果该规则未生效,请手动检查防火墙配置。
方式二:通过 PowerShell 安装
以管理员身份打开 PowerShell,执行以下命令:
# 检查 OpenSSH 是否已安装
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'
# 安装 OpenSSH 客户端
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
# 安装 OpenSSH 服务器
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
安装完成后,启动服务并设置为开机自启:
# 启动 sshd 服务
Start-Service sshd
# 设置为自动启动
Set-Service -Name sshd -StartupType 'Automatic'
# 确认防火墙规则已创建
if (!(Get-NetFirewallRule -Name "OpenSSH-Server-In-TCP" -ErrorAction SilentlyContinue)) {
New-NetFirewallRule -Name 'OpenSSH-Server-In-TCP' -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
}
三、首次连接测试
安装完成后,你可以从同一局域网内的另一台 Windows 设备(需安装 OpenSSH 客户端)尝试连接:
ssh domain\username@服务器IP或主机名
首次连接时,系统会提示确认主机指纹:
The authenticity of host 'servername (10.00.00.001)' can't be established.
ECDSA key fingerprint is SHA256:(...).
Are you sure you want to continue connecting (yes/no)?
输入 yes 后,该服务器会被加入已知主机列表。随后输入密码即可登录。
四、进阶配置:基于密钥的身份验证
密码登录虽然简单,但容易遭受暴力破解攻击。基于密钥的身份验证是更为安全的选择。
4.1 在客户端生成密钥对
在 客户端 的 PowerShell 中执行以下命令生成密钥对(推荐 ECDSA 或 Ed25519 算法):
ssh-keygen -t ecdsa
按提示操作:
- 按
Enter接受默认保存路径(C:\Users\用户名\.ssh\id_ecdsa) - 强烈建议设置密码短语(passphrase),实现密钥的双重保护
生成后,你会得到两个文件:
id_ecdsa—— 私钥(严禁泄露,相当于密码)id_ecdsa.pub—— 公钥(可安全分发)
4.2 将私钥添加到 ssh-agent
ssh-agent 服务可以安全地缓存私钥,避免每次连接时重复输入密码短语:
# 设置 ssh-agent 为自动启动
Get-Service ssh-agent | Set-Service -StartupType Automatic
# 启动 ssh-agent 服务
Start-Service ssh-agent
# 将私钥加载到代理中
ssh-add $env:USERPROFILE\.ssh\id_ecdsa
建议:将私钥加载到代理后,可将其从本地磁盘删除或备份到安全位置。一旦私钥丢失,需重新生成并更新所有服务器上的公钥。
4.3 将公钥部署到服务器
公钥的存放位置取决于你的账户权限。
场景一:标准用户(非管理员)
在客户端 PowerShell 中执行:
$authorizedKey = Get-Content -Path $env:USERPROFILE\.ssh\id_ecdsa.pub
$remotePowershell = "powershell New-Item -Force -ItemType Directory -Path $env:USERPROFILE\.ssh; Add-Content -Force -Path $env:USERPROFILE\.ssh\authorized_keys -Value '$authorizedKey'"
ssh username@domain@hostname $remotePowershell
系统会提示输入服务器账户密码,验证后公钥会自动写入服务器的 ~/.ssh/authorized_keys 文件。
场景二:管理员用户
管理员账户需要使用 administrators_authorized_keys 文件,并设置严格的 ACL 权限:
$authorizedKey = Get-Content -Path $env:USERPROFILE\.ssh\id_ecdsa.pub
$remotePowershell = "powershell Add-Content -Force -Path $env:ProgramData\ssh\administrators_authorized_keys -Value '$authorizedKey'; icacls.exe `"$env:ProgramData\ssh\administrators_authorized_keys`" /inheritance:r /grant `"Administrators:F`" /grant `"SYSTEM:F`""
ssh username@domain@hostname $remotePowershell
如果操作系统非英文版本,建议使用 安全标识符(SID) 代替组名:
$remotePowershell = "powershell Add-Content -Force -Path $env:ProgramData\ssh\administrators_authorized_keys -Value '$authorizedKey'; icacls.exe `"$env:ProgramData\ssh\administrators_authorized_keys`" /inheritance:r /grant `"*S-1-5-32-544:F`" /grant `"SYSTEM:F`""
五、验证密钥登录
完成上述部署后,再次尝试 SSH 连接:
ssh domain\username@服务器IP
如果一切配置正确,系统将不再要求输入密码(或仅需输入密钥的密码短语),直接登录成功。
六、补充:卸载与禁用
如果需要卸载 OpenSSH 组件,可通过“可选功能”界面选择 OpenSSH 客户端 或 OpenSSH 服务器 并点击 “卸载”。也可以通过 PowerShell 执行:
Remove-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
Remove-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
若要临时禁用服务,可在服务管理控制台中将启动类型设为 “禁用”,或通过 Server Manager 将“远程 SSH 访问”设为 “已禁用”。