告别密码暴力破解:Windows OpenSSH 服务器安装与密钥认证完全指南

在Windows系统管理的日常工作中,远程管理服务器是一项高频且关键的操作。传统的远程桌面协议(RDP)虽然直观,但在安全性、自动化以及资源消耗方面存在天然的短板。相比之下,OpenSSH 作为一款基于 SSH 协议的开源连接工具,能够加密客户端与服务器之间的所有流量,有效遏止窃听、连接劫持等网络攻击。

好消息是,从 Windows Server 2019Windows 10(内部版本 1809) 开始,OpenSSH 服务器已作为可选功能直接集成在操作系统之中。这意味着我们无需再依赖第三方工具,就能在 Windows 生态中原生地搭建起安全、标准的远程管理通道。

本文将手把手带你完成 Windows OpenSSH 服务器的安装与配置,并配置秘钥验证,彻底告别密码登录的安全隐患。

一、环境准备与先决条件

在动手之前,请确保你的环境满足以下条件:

  • 操作系统版本:Windows Server 2019 / 2022 / 2025Windows 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 安装

  1. 点击 “开始”,搜索 “可选功能” 并打开。
  2. 点击页面顶部的 “查看功能”(或 “添加功能”)。
  3. 分别搜索 OpenSSH 客户端OpenSSH 服务器,点击 “添加” 进行安装。
  4. 安装完成后,按 Win + R,输入 services.msc 打开服务管理控制台。
  5. 找到 OpenSSH SSH Server 服务,双击打开属性。
  6. “启动类型” 设置为 “自动”,然后点击 “启动” 按钮启动服务。

注意:安装 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 访问”设为 “已禁用”

LICENSED UNDER CC BY-NC-SA 4.0
评论