OpenSSH免密登录
实验环境:
云服务器:Server 2019,安装OpenSSH
客户机:Windows11
第一步:在 Windows 11(客户机)生成密钥对
1.在 Win11 上打开 PowerShell。
2.输入以下命令生成密钥(一路回车即可):
PowerShell
ssh-keygen -t ed25519
3. 生成后,你的公钥会保存在 C:\Users\你的Win11用户名\.ssh\id_ed25519.pub。
4. 用文本编辑器打开这个 .pub 文件,**复制里面的全部内容**。
第二步:在 Server 2019(服务器)配置公钥
根据你登录 Server 2019 的账号类型,公钥存放的位置**完全不同**,请务必对号入座:
#### 情况 A:如果你使用的是普通用户登录 Server 2019
1. 登录服务器,进入该用户的家目录(例如 C:\Users\myuser)。
2. 创建一个名为 .ssh 的文件夹,并在里面新建一个名为 authorized_keys 的文件(注意没有后缀名)。
3. 把刚才复制的 Win11 公钥内容粘贴进去并保存。
4. 最终路径为:C:\Users\myuser\.ssh\authorized_keys。
#### 情况 B:如果你使用的是 Administrator 权限账号(最常见)
Windows 版 OpenSSH 默认对管理员有特殊规定,其公钥**不放在**用户目录下,而是存放在系统全局目录中:
1. 登录服务器,打开路径:C:\ProgramData\ssh\(注:ProgramData 是隐藏文件夹)。
2. 在该目录下找到 administrators_authorized_keys 文件(如果没有就手动创建一个,注意没有后缀名)。
3. 把 Win11 的公钥内容粘贴进去并保存。
第三步:在 Server 2019 上修复权限(关键步骤)
Windows 对文件权限极其敏感,如果权限太开放,SSH 会直接忽略免密登录。
#### 如果是普通用户(情况 A):
确保 C:\Users\myuser\.ssh\authorized_keys 这个文件,**只有该用户本身和 SYSTEM 有权限访问**,右键文件 -> 属性 -> 安全 -> 高级,禁用继承并删除其他无关用户。
#### 如果是管理员(情况 B):
你必须确保 C:\ProgramData\ssh\administrators_authorized_keys 的权限非常严格。
请在服务器上以**管理员身份打开 PowerShell**,执行以下命令来自动修复该文件的权限:
$path = "$env:ProgramData\ssh\administrators_authorized_keys"
# 继承权限禁用
icacls $path /inheritance:r
# 赋予 Administrators 组和 SYSTEM 完全控制权限
icacls $path /grant "Administrators:(F)"
icacls $path /grant "SYSTEM:(F)"
第四步:检查并重启服务器的 SSH 服务
在 Server 2019 上,打开 C:\ProgramData\ssh\sshd_config 文件。
确保以下两行没有被 # 注释(如果是情况 B,这两行必须存在):
PubkeyAuthentication yes
AuthorizedKeysFile __programdata__/ssh/administrators_authorized_keys
3. 在服务器的管理员 PowerShell 中重启 SSH 服务使其生效:
Restart-Service sshd
第五步:在 Windows 11 上一键连接
现在回到你的 Windows 11 PowerShell 中,直接输入命令即可秒连,不再需要密码:
ssh Administrator@服务器IP
小贴士: 如果想进一步偷懒,可以在 Win11 的 C:\Users\你的Win11用户名.ssh\ 目录下创建一个名为 config 的文本文件(无后缀),写入:
Host win-server
HostName 服务器IP
User Administrator
之后在 Win11 终端里只需要输入 ssh win-server 就能直接登录了。
浙公网安备 33010602011771号