PuTTY SSH密钥登录配置教程(PuTTYgen生成密钥 + Pageant免密登录)

📅 2026/7/8 9:52:01 👁️ 阅读次数 📝 编程学习
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):

  1. 密钥类型选Ed25519(推荐)或RSA(兼容性最好,选2048位以上)
  2. 点击Generate按钮
  3. 在进度条区域随机晃动鼠标——PuTTYgen会采集鼠标轨迹的随机数据来增强密钥的随机性
  4. 生成完成后,窗口上方显示的就是你的公钥文本

接下来设置密钥密码(可选但强烈建议设置):

  • 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-ed25519ssh-rsa开头)粘贴进去。

注意:公钥是一整行,不要换行。多个公钥每行一个。

# 3. 设置正确权限chmod600~/.ssh/authorized_keys

权限设错会导致密钥登录失败,600 是必须的。

验证公钥是否写进去了:

cat~/.ssh/authorized_keys

看到你刚才粘贴的公钥文本就算OK。退出SSH连接,准备测试免密登录。

第三步:配置PuTTY使用密钥

  1. 打开PuTTY主程序
  2. Session页面填好服务器IP和端口(默认22)
  3. 左侧导航:Connection → SSH → Auth → Credentials
  4. 点击Private key file for authentication旁边的Browse,选刚才保存的.ppk文件
  5. 回到Session页面,在Saved Sessions里输入一个会话名(如"生产服务器"),点Save保存配置
  6. Open连接

如果一切正常,会提示输入密钥密码(就是你生成密钥时设的那个),输入后直接登录,不再需要服务器用户密码。

第四步:Pageant密钥代理(关键效率提升)

上面配置完之后每次打开PuTTY还是要输一遍密钥密码。如果你管理多台服务器,每台输一遍能烦死。

Pageant就是解决这个问题的——一次输入,全窗口复用

  1. 运行pageant.exe(开始菜单PuTTY文件夹里)
  2. 系统托盘出现一个戴帽子电脑的图标 🎩💻
  3. 右键托盘图标 →Add Key→ 选择.ppk文件
  4. 输入一次密钥密码
  5. 之后所有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

安全建议

  1. 务必给私钥设密码——这是最后一道防线
  2. 不同环境用不同密钥——不要所有服务器共享一对密钥
  3. 每6-12个月轮换一次密钥
  4. 私钥绝不通过网络传输(微信/邮件/网盘都不行)
  5. 离职或设备遗失后立即从服务器 authorized_keys 中删除对应公钥

配置完成之后,你的工作流就变成了:开机 → 启动Pageant加载密钥 → 双击PuTTY会话直接登录。比输密码快,也更安全。

PuTTY Windows版:https://putty.ijinshan.com/
安装包3.2MB,MIT开源协议,免费无限制。