# Windows Server SSH 部署完整指南 从零开始在 Windows Server 上安装 OpenSSH,并配置免密密钥登录。 --- ## 一、服务器端:安装 OpenSSH Server ### 方案 A:Windows Server 2019 / 2022 / 2025(推荐) 以管理员身份打开 PowerShell,执行以下命令: ```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 ``` 验证安装: ```powershell 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 密码登录): ```bash scp /tmp/OpenSSH-Win64.zip Administrator@服务器IP:D:/ ``` 4. 在服务器上打开 PowerShell(管理员),解压并安装: ```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`,将以下内容写入: ```ini # === 认证安全 === 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 ``` 验证配置无误: ```powershell sshd -t # 无输出即表示配置正确 ``` 如果输出提示 syntax error,检查配置文件是否有拼写错误。 重启服务使配置生效: ```powershell Restart-Service sshd ``` --- ## 三、本机(Mac/Linux):生成 SSH 密钥 在你的 Mac 上打开终端: ```bash # 生成 Ed25519 密钥对(目前最安全、性能最好的算法) ssh-keygen -t ed25519 -C "你的邮箱或备注" # 一路回车即可,会在 ~/.ssh/ 下生成两个文件: # id_ed25519 → 私钥(绝不外泄) # id_ed25519.pub → 公钥(放到服务器上) ``` > 如果已有 `~/.ssh/id_ed25519`,可以跳过此步直接复用。 --- ## 四、上传公钥到服务器 ### 方法一:一行命令(推荐,首次需要密码) ```bash # 把公钥写到 Windows 的 administrators_authorized_keys scp ~/.ssh/id_ed25519.pub Administrator@服务器IP:"C:/ProgramData/ssh/administrators_authorized_keys" ``` 执行后输入 Administrator 密码。这条命令只需执行一次。 ### 方法二:手动复制 在 Mac 上查看公钥内容: ```bash cat ~/.ssh/id_ed25519.pub ``` 在服务器上打开 `C:\ProgramData\ssh\administrators_authorized_keys`,把公钥粘贴进去,保存。 --- ## 五、配置 SSH 别名(便捷连接) 编辑 Mac 上的 `~/.ssh/config` 文件: ```bash nano ~/.ssh/config ``` 添加以下内容: ``` Host vps HostName 119.23.65.115 User Administrator IdentityFile ~/.ssh/id_ed25519 ``` `Host` 后面是别名,可以自定义(如 `vps`、`server`、`ECS` 等)。 ### 多服务器示例 ``` 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` 免密登录。 --- ## 六、验证 ```bash # 测试连接 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*