PuTTY SSH密钥登录配置教程(PuTTYgen生成密钥 + Pageant免密登录)
前言
用PuTTY连Linux服务器,每次输密码是不是很烦?更烦的是密码输错了还要重新来过。
SSH密钥登录可以彻底解决这个问题——一次配置,终身免密。而且比密码登录更安全(2048位以上的密钥暴力破解难度远高于普通密码)。
网上大部分教程只讲了用PuTTYgen生成密钥这一步,但实际生产环境中,Pageant密钥代理才是提升效率的关键。本文把整条链路讲清楚。
环境说明
- 本地:Windows 10/11,已安装PuTTY
- 远程:Linux服务器(CentOS/Ubuntu均可),已开启SSH服务(默认端口22)
- PuTTY下载:https://putty.ijinshan.com/
第一步:PuTTYgen生成密钥对
打开PuTTYgen(开始菜单PuTTY文件夹里,或直接运行puttygen.exe):
- 密钥类型选Ed25519(推荐)或RSA(兼容性最好,选2048位以上)
- 点击Generate按钮
- 在进度条区域随机晃动鼠标——PuTTYgen会采集鼠标轨迹的随机数据来增强密钥的随机性
- 生成完成后,窗口上方显示的就是你的公钥文本
接下来设置密钥密码(可选但强烈建议设置):
- 在Key passphrase输入框填一个密码
- 在Confirm passphrase再输一遍确认
- 点击Save private key,把
.ppk私钥文件存到安全位置(比如D:\keys\my_server.ppk)
⚠️ 安全提醒 .ppk 私钥文件等同于登录密码,不要上传到任何公开位置(GitHub/Gitee/网盘)。 建议备份到加密U盘或密码管理器中。第二步:把公钥部署到服务器
先用密码登录服务器,然后执行以下命令:
# 1. 创建 .ssh 目录(如果不存在)mkdir-p~/.sshchmod700~/.ssh# 2. 编辑 authorized_keys 文件nano~/.ssh/authorized_keys把PuTTYgen窗口里“Public key for pasting into OpenSSH authorized_keys file”下面那整段文本(以ssh-ed25519或ssh-rsa开头)粘贴进去。
注意:公钥是一整行,不要换行。多个公钥每行一个。
# 3. 设置正确权限chmod600~/.ssh/authorized_keys权限设错会导致密钥登录失败,600 是必须的。
验证公钥是否写进去了:
cat~/.ssh/authorized_keys看到你刚才粘贴的公钥文本就算OK。退出SSH连接,准备测试免密登录。
第三步:配置PuTTY使用密钥
- 打开PuTTY主程序
- 在Session页面填好服务器IP和端口(默认22)
- 左侧导航:Connection → SSH → Auth → Credentials
- 点击Private key file for authentication旁边的Browse,选刚才保存的
.ppk文件 - 回到Session页面,在Saved Sessions里输入一个会话名(如"生产服务器"),点Save保存配置
- 点Open连接
如果一切正常,会提示输入密钥密码(就是你生成密钥时设的那个),输入后直接登录,不再需要服务器用户密码。
第四步:Pageant密钥代理(关键效率提升)
上面配置完之后每次打开PuTTY还是要输一遍密钥密码。如果你管理多台服务器,每台输一遍能烦死。
Pageant就是解决这个问题的——一次输入,全窗口复用。
- 运行
pageant.exe(开始菜单PuTTY文件夹里) - 系统托盘出现一个戴帽子电脑的图标 🎩💻
- 右键托盘图标 →Add Key→ 选择
.ppk文件 - 输入一次密钥密码
- 之后所有PuTTY窗口连接时自动使用这个密钥,不用再输任何密码
多密钥管理:如果你有多台服务器用了不同的密钥对,依次 Add Key 把几个.ppk全加载进去。Pageant会逐个尝试,自动匹配服务器接受的公钥。
离开电脑时建议右键托盘图标 →View Keys→ 全选 Remove,防止别人用你电脑连接服务器。
常见问题排查
问题1:提示 “Server refused our key”
排查顺序: ① authorized_keys 文件权限是不是 600?(chmod 600 ~/.ssh/authorized_keys) ② .ssh 目录权限是不是 700?(chmod 700 ~/.ssh) ③ authorized_keys 里公钥是不是完整的一行?有没有被换行截断? ④ 服务器 SELinux 是否拦截?(CentOS/RHEL 执行 restorecon -R ~/.ssh) ⑤ /etc/ssh/sshd_config 里 PubkeyAuthentication 是否为 yes?改完 sshd_config 记得重启SSH服务:
sudosystemctl restart sshd# CentOS/RHELsudosystemctl restartssh# Ubuntu/Debian问题2:密钥登录成功但还是要求输密码
如果密钥正确但服务器跳过密钥直接要密码,检查 sshd_config:
sudogrep-E"PubkeyAuthentication|PasswordAuthentication"/etc/ssh/sshd_config确保PubkeyAuthentication yes。如果想彻底禁用密码登录(更安全):
sudosed-i's/^#PasswordAuthentication yes/PasswordAuthentication no/'/etc/ssh/sshd_configsudosystemctl restart sshd问题3:Pageant加载密钥后PuTTY还是提示输入密钥密码
检查PuTTY的 Connection → SSH → Auth → Credentials 里是否勾选了“Attempt authentication using Pageant”(默认是勾的)。如果没勾,勾上后保存会话再试。
密钥类型怎么选
| 类型 | 速度 | 安全性 | 兼容性 | 推荐场景 |
|---|---|---|---|---|
| Ed25519 | 最快 | 最高 | OpenSSH 6.5+(2014年后) | 现代Linux,日常首选 |
| RSA 3072/4096 | 中等 | 高 | 几乎所有系统 | 老旧系统,合规要求 |
| ECDSA | 快 | 高 | 中等 | 嵌入式/低功耗设备 |
建议:能选Ed25519就选Ed25519。密钥串短(方便复制)、签名速度快、安全性等同于RSA 3000位以上。
密钥格式互转
不同工具之间迁移时经常碰到格式不兼容的问题:
# PuTTY .ppk → OpenSSH(Linux用)打开 PuTTYgen → Load 加载.ppk → Conversions → Export OpenSSH key# OpenSSH私钥 → PuTTY .ppk打开 PuTTYgen → Conversions → Import key → Save private key安全建议
- 务必给私钥设密码——这是最后一道防线
- 不同环境用不同密钥——不要所有服务器共享一对密钥
- 每6-12个月轮换一次密钥
- 私钥绝不通过网络传输(微信/邮件/网盘都不行)
- 离职或设备遗失后立即从服务器 authorized_keys 中删除对应公钥
配置完成之后,你的工作流就变成了:开机 → 启动Pageant加载密钥 → 双击PuTTY会话直接登录。比输密码快,也更安全。
PuTTY Windows版:https://putty.ijinshan.com/
安装包3.2MB,MIT开源协议,免费无限制。
