如何在 Windows Server 上构建 SSH 服务器

概述

本文将逐步介绍如何在 Windows Server 上安装 OpenSSH Server,并完成密钥认证、服务自动启动、防火墙放行等安全配置。

变量说明

变量名 示例值 说明
<<SERVER>> 192.168.1.10 目标主机名或 IP 地址

步骤 1:安装 OpenSSH 服务器

以管理员权限启动 PowerShell,执行以下命令:

Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

步骤 2:启动并设置自动启动

安装完成后,启动 SSH 服务 (sshd),并将其设为开机自启:

# 启动服务
Start-Service sshd

# 设置为自动启动
Set-Service -Name sshd -StartupType Automatic

💡 提示
首次启动 sshd 服务时,系统会自动生成默认配置文件与主机密钥,包括:

  • %ProgramData%\ssh\sshd_config(配置文件)
  • %ProgramData%\ssh\ssh_host_*(主机密钥)

如需修改配置,请在这些文件生成后再进行编辑。

步骤 3:防火墙放行

允许 SSH 通信(默认端口 22):

New-NetFirewallRule -Name "OpenSSH-Server" -DisplayName "OpenSSH Server (sshd)" `
  -Enabled True -Direction Inbound -Protocol TCP -LocalPort 22 -Action Allow

步骤 4:配置密钥认证(推荐)

  1. 客户端 SSH 密钥生成与配置步骤详见

  2. 将公钥注册至服务器:

    • 普通用户:存放于用户目录下 .ssh\authorized_keys
    • 管理员账户:存放于 %ProgramData%\ssh\administrators_authorized_keys
  3. 编辑服务器端配置文件 %ProgramData%\ssh\sshd_config,确认以下设置:

    PubkeyAuthentication yes
    AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys
    

步骤 5:首次连接与验证

在客户端执行以下命令连接服务器:

ssh Administrator@<<SERVER>>

首次连接会提示确认主机密钥。连接成功后,可通过 whoami 命令确认登录身份。

步骤 6:安全加固与限制

sshd_config 中可添加以下安全配置:

Port 2222
AllowGroups SSHAdmins
AllowUsers Administrator deployuser
PasswordAuthentication no
KbdInteractiveAuthentication no
PubkeyAuthentication yes
  • Port 2222
    修改默认端口以降低暴力攻击风险。
  • AllowGroups SSHAdmins
    限定允许连接的用户组。
  • AllowUsers Administrator deployuser
    限定允许连接的用户。
  • PasswordAuthentication no
    禁用密码登录,仅允许密钥认证。
  • KbdInteractiveAuthentication no
    禁用交互式键盘认证。
  • PubkeyAuthentication yes
    启用公钥认证。

ℹ️ 注意
在 Windows Server 2025 及更高版本中,SSH 默认启用组访问控制。部分语言环境下的 “OpenSSH Users” 组可能无效,请自行创建 SSHAdmins 等安全组。

步骤 7:查看日志

使用 PowerShell 查看近期 SSH 日志:

Get-WinEvent -LogName OpenSSH/Operational `
  | Where-Object { $_.TimeCreated -ge (Get-Date).AddHours(-1) } `
  | Select-Object TimeCreated, Id, LevelDisplayName, Message

可用日志名称可通过以下命令确认:

wevtutil el | findstr OpenSSH

总结

通过在 Windows Server 上部署 OpenSSH 服务器,可实现与 Linux/Unix 相同的远程管理方式。结合密钥认证、防火墙与组策略设置,可构建安全、可控的远程访问环境。