Windows Server SSH部署指南.md 5.7 KB

Windows Server SSH 部署完整指南

从零开始在 Windows Server 上安装 OpenSSH,并配置免密密钥登录。


一、服务器端:安装 OpenSSH Server

方案 A:Windows Server 2019 / 2022 / 2025(推荐)

以管理员身份打开 PowerShell,执行以下命令:

# 1. 安装 OpenSSH Server
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

# 2. 启动服务
Start-Service sshd

# 3. 设为开机自启
Set-Service -Name sshd -StartupType 'Automatic'

# 4. 确认防火墙允许端口 22
New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server' `
  -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22

验证安装:

Get-Service sshd
# 应显示 Status: Running

方案 B:Windows Server 2012 R2 / 2016(手动安装)

  1. 在本地 Mac 浏览器中打开: https://github.com/PowerShell/Win32-OpenSSH/releases/latest

  2. 下载 OpenSSH-Win64.zip,保存到本地(如 /tmp/OpenSSH-Win64.zip

  3. 用 SCP 传到服务器(临时用 Administrator 密码登录):

    scp /tmp/OpenSSH-Win64.zip Administrator@服务器IP:D:/
    
  4. 在服务器上打开 PowerShell(管理员),解压并安装:

    # 解压
    Add-Type -AssemblyName System.IO.Compression.FileSystem
    [System.IO.Compression.ZipFile]::ExtractToDirectory(
       'D:\OpenSSH-Win64.zip', 'C:\Program Files\OpenSSH'
    )
    
    # 安装服务
    powershell -ExecutionPolicy Bypass -File "C:\Program Files\OpenSSH\install-sshd.ps1"
    
    # 启动
    Start-Service sshd
    Set-Service -Name sshd -StartupType 'Automatic'
    

注意:2012 R2 的 PowerShell 默认 TLS 版本较老,下载 GitHub 文件可能失败。 此时选择从本地 Mac 用 curl 下载再 SCP 上传。


二、服务器端:安全加固

编辑配置文件 C:\ProgramData\ssh\sshd_config,将以下内容写入:

# === 认证安全 ===
LoginGraceTime 30              # 登录限时 30 秒(默认 120s)
PermitRootLogin no             # 禁止 root 登录
MaxAuthTries 3                 # 最多 3 次失败(默认 6 次)
PubkeyAuthentication yes       # 开启密钥认证
PasswordAuthentication no      # 关闭密码登录
PermitEmptyPasswords no        # 禁止空密码
HostbasedAuthentication no     # 禁止基于主机的认证
GSSAPIAuthentication no        # 关闭 GSSAPI

# === 会话安全 ===
ClientAliveInterval 300        # 空闲 5 分钟发送心跳
ClientAliveCountMax 2          # 2 次无响应断开
AllowAgentForwarding no        # 关闭 Agent 转发

# === 访问控制 ===
AllowUsers Administrator       # 仅允许 Administrator 登录
UseDNS no                      # 跳过 DNS 反查(加速登录)

# === 子系统 ===
Subsystem sftp sftp-server.exe

# === 管理员组密钥路径 ===
Match Group administrators
       AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys

验证配置无误:

sshd -t
# 无输出即表示配置正确

如果输出提示 syntax error,检查配置文件是否有拼写错误。

重启服务使配置生效:

Restart-Service sshd

三、本机(Mac/Linux):生成 SSH 密钥

在你的 Mac 上打开终端:

# 生成 Ed25519 密钥对(目前最安全、性能最好的算法)
ssh-keygen -t ed25519 -C "你的邮箱或备注"

# 一路回车即可,会在 ~/.ssh/ 下生成两个文件:
#   id_ed25519      → 私钥(绝不外泄)
#   id_ed25519.pub  → 公钥(放到服务器上)

如果已有 ~/.ssh/id_ed25519,可以跳过此步直接复用。


四、上传公钥到服务器

方法一:一行命令(推荐,首次需要密码)

# 把公钥写到 Windows 的 administrators_authorized_keys
scp ~/.ssh/id_ed25519.pub Administrator@服务器IP:"C:/ProgramData/ssh/administrators_authorized_keys"

执行后输入 Administrator 密码。这条命令只需执行一次。

方法二:手动复制

在 Mac 上查看公钥内容:

cat ~/.ssh/id_ed25519.pub

在服务器上打开 C:\ProgramData\ssh\administrators_authorized_keys,把公钥粘贴进去,保存。


五、配置 SSH 别名(便捷连接)

编辑 Mac 上的 ~/.ssh/config 文件:

nano ~/.ssh/config

添加以下内容:

Host vps
  HostName 119.23.65.115
  User Administrator
  IdentityFile ~/.ssh/id_ed25519

Host 后面是别名,可以自定义(如 vpsserverECS 等)。

多服务器示例

Host aliyun-master
  HostName 1.2.3.4
  User Administrator
  IdentityFile ~/.ssh/id_ed25519

Host aliyun-worker
  HostName 5.6.7.8
  User Administrator
  IdentityFile ~/.ssh/id_ed25519

保存后即可直接 ssh vps 免密登录。


六、验证

# 测试连接
ssh vps

# 应该直接进入 PowerShell,无密码提示
# 看到类似下文的欢迎信息即表示成功:
#   Windows PowerShell
#   Copyright (C) Microsoft Corporation. All rights reserved.
#   PS C:\Users\Administrator>

如果要求输入密码,检查:

  • PasswordAuthentication 是否设为 no
  • 公钥是否已正确上传
  • 服务器 sshd 是否已重启

附录:常用命令速查

操作 命令
生成密钥 ssh-keygen -t ed25519
查看公钥 cat ~/.ssh/id_ed25519.pub
上传公钥 scp ~/.ssh/id_ed25519.pub user@ip:"C:/ProgramData/ssh/administrators_authorized_keys"
测试连接 ssh vps
查 sshd 状态 sc query sshd(服务端 PowerShell)
查 SSH 版本 ssh -V(客户端)/ sshd -?(服务端)
校验配置 sshd -t(服务端)
重启 sshd Restart-Service sshd(服务端)

最后更新:2026-05-21