❧ Windows OpenSSH 安装与免密登录配置
一、安装 OpenSSH Server(Win32-OpenSSH)
1. 下载
前往 Win32-OpenSSH Releases 下载:
OpenSSH-Win64.zip解压到 C:\OpenSSH 目录。
2. 安装
cd C:\OpenSSHSet-ExecutionPolicy Bypass -Scope Process.\install-sshd.ps13. 启动服务并设置开机自启
Start-Service sshdSet-Service sshd -StartupType Automatic4. 开放防火墙 22 端口
New-NetFirewallRule ` -Name sshd ` -DisplayName "OpenSSH Server" ` -Enabled True ` -Direction Inbound ` -Protocol TCP ` -Action Allow ` -LocalPort 22二、本地 Windows 免密 SSH 连接远程 Windows
环境说明
| 端 | 说明 |
|---|---|
| 本地 | Windows 自带 OpenSSH |
| 远程 | Windows 已开启 sshd 服务 |
| 远程账号 | difei,属于 BUILTIN\Administrators 管理员组 |
1. 本地:生成密钥对
ssh-keygen -t ed25519- 保存路径:默认回车
- 密钥密码:直接回车留空(完全免密)
生成后的文件位置:
| 文件 | 路径 |
|---|---|
| 私钥 | C:\Users\本机用户名\.ssh\id_ed25519 |
| 公钥 | C:\Users\本机用户名\.ssh\id_ed25519.pub |
2. 远程:配置 SSH 免密
2.1 确认 OpenSSH Server 已安装并启动
设置 → 应用 → 可选功能 → 添加 OpenSSH 服务器,或使用 Win32-OpenSSH 手动安装。
Start-Service sshdSet-Service sshd -StartupType Automatic2.2 防火墙放行 22 端口
New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH SSH Server' ` -Direction Inbound -Protocol TCP -LocalPort 22 -Action Allow -Enabled True2.3 创建 .ssh 目录并写入公钥
在远程执行:
mkdir C:\Users\difei\.ssh将本地 id_ed25519.pub 的全部内容粘贴写入远程:
C:\Users\difei\.ssh\authorized_keys3. 管理员账号特殊处理(关键)
只要账号属于
Administrators组,普通的.ssh/authorized_keys不会生效,必须额外配置。
3.1 判断是否为管理员账号
whoami /groups输出中出现 BUILTIN\Administrators → 必须使用以下专用配置。
3.2 复制到管理员专用密钥文件
copy C:\Users\difei\.ssh\authorized_keys C:\ProgramData\ssh\administrators_authorized_keys3.3 严格设置文件权限(Windows OpenSSH 强制要求)
# 移除继承权限icacls "C:\ProgramData\ssh\administrators_authorized_keys" /inheritance:r
# 只允许管理员和系统访问icacls "C:\ProgramData\ssh\administrators_authorized_keys" /grant "Administrators:(F)"icacls "C:\ProgramData\ssh\administrators_authorized_keys" /grant "SYSTEM:(F)"3.4 重启 sshd 服务
Restart-Service sshd4. 本地测试免密登录
ssh difei@192.168.191.62无需输入密码,直接连接成功即为配置完成。
5. 排错要点
| 序号 | 要点 |
|---|---|
| 1 | 使用 ssh -v difei@192.168.191.62 查看密钥握手详情 |
| 2 | 管理员账号不能只用用户目录下的 authorized_keys |
| 3 | 权限必须收紧,不能有 Everyone / Authenticated Users 权限 |
| 4 | 配置完毕后务必重启 sshd 服务 |
| 5 | 确认防火墙已放行 22 端口 |
原因 1:sshd_config 禁用了公钥登录(最常见)
去远程 Windows,打开:
C:\ProgramData\ssh\sshd_config检查以下关键配置(确保未被注释且值正确):
PubkeyAuthentication yesAuthorizedKeysFile .ssh/authorized_keys如果存在以下情况,会直接导致公钥登录失败:
PubkeyAuthentication no❌AuthorizedKeysFile被改为错误路径 ❌
修改后重启服务使配置生效:
Restart-Service sshd