从零开始在 Windows Server 上安装 OpenSSH,并配置免密密钥登录。
以管理员身份打开 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
在本地 Mac 浏览器中打开: https://github.com/PowerShell/Win32-OpenSSH/releases/latest
下载 OpenSSH-Win64.zip,保存到本地(如 /tmp/OpenSSH-Win64.zip)
用 SCP 传到服务器(临时用 Administrator 密码登录):
scp /tmp/OpenSSH-Win64.zip Administrator@服务器IP:D:/
在服务器上打开 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 上打开终端:
# 生成 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,把公钥粘贴进去,保存。
编辑 Mac 上的 ~/.ssh/config 文件:
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 免密登录。
# 测试连接
ssh vps
# 应该直接进入 PowerShell,无密码提示
# 看到类似下文的欢迎信息即表示成功:
# Windows PowerShell
# Copyright (C) Microsoft Corporation. All rights reserved.
# PS C:\Users\Administrator>
如果要求输入密码,检查:
PasswordAuthentication 是否设为 nosshd 是否已重启| 操作 | 命令 |
|---|---|
| 生成密钥 | 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