
密钥文件明明是对的,在 Linux 上 ssh 能用,拿到 PuTTY 里却加载不了。
或者反过来——PuTTY 生成的密钥,导入别的工具报错:
PuTTY key format too new这类问题跟密钥本身没关系,是"容器"不匹配。
理解这个问题,得先分清两件事。
第一层:密钥的数学材料。
就是那对 RSA 或 Ed25519 的私钥/公钥数值。这部分是通用的——不管用什么工具,同一对密钥的数学内容完全一样。
第二层:密钥文件怎么存。
同样一份材料,可以用不同的方式打包进文件:
这就是"格式"的差别。
钥匙是同一把,但装钥匙的盒子有好几种。
工具只认自己那套盒子——盒子不对,就报"无法加载",跟钥匙对不对无关。
实际会遇到的主要有三种。
PPK 是 PuTTY Private Key 的缩写,是 PuTTY 自己定义的容器格式。
它的特点是文件里除了密钥材料,还带了一堆元数据——算法信息、注释、加密参数等。
因为是自己定的标准,只有 PuTTY 系的工具认识它:PuTTY、PuTTYgen、WinSCP、TortoiseGit 这些。
文件头长这样:
-----BEGIN RSA PRIVATE KEY-----这是 OpenSSL 定义的标准,通用性最强。云服务商的控制台、很多第三方工具都认这个。
但要注意:它是较老的格式,新版的 ssh-keygen 默认不再生成它。
文件头是:
-----BEGIN OPENSSH PRIVATE KEY-----这是 OpenSSH 自己的一套格式,现代 ssh-keygen 默认生成的就是它。
好处是支持更现代的加密方式,还带有注释字段。
但代价是——某些老工具不认识它。
这是最实用的一个技巧。
不用打开软件试,直接看文件第一行:
同样,公钥的写法也分两种:
遇到"格式不对"的报错,先看文件头,基本就知道问题在哪了。
现象:在 PuTTY 里选择私钥文件,提示加载失败。
原因:id_rsa 通常是 OpenSSH 或 PEM 格式,PuTTY 读不了。它只认 PPK。
处理:用 PuTTYgen 转一次。
打开 PuTTYgen → 点 Load → 选择你的 id_rsa (注意把文件类型筛选改成"All Files",否则看不到没有扩展名的文件)→ 加载成功后点 Save private key,存成 .ppk。
关键一点:转换不改变密钥本身。
私钥材料原封不动,只是换了个容器。所以服务器上的 authorized_keys 不用动,转换后照样能登录。
现象:PuTTY 生成的密钥,导入旧版 WinSCP、FileZilla 或某些工具时报错。
原因:这是 PPK 版本的问题。
新版本生成 v3,老工具只认 v2——于是报"格式太新"。
处理:用 PuTTYgen 打开密钥,在菜单里找到保存参数设置,把 PPK 版本改成 2,再保存一份。
两个方向都有代价:
如果只是偶尔兼容一下老软件,存两份就行。
现象:连接时提示服务器指纹变化,或者你拿着指纹去核对,怎么都对不上。
原因:指纹有两种算法,显示出来完全不同。
同一把密钥,两种算法算出来的字符串毫无相似之处。
如果文档给的是 MD5,你在客户端看到的是 SHA256,那永远对不上——不是密钥错了,是基准不一样。
现在的默认是 SHA256(OpenSSH 6.8 之后)。MD5 属于遗留标准,只在跟很老的系统比对时才需要。
核对指纹时先确认对方给的是哪种,能省掉很多困惑。
顺便说个常被忽略的点。
PuTTY 不只是那个窗口程序,它包含一组工具:
Pageant 值得单独提一下。
它做的事是:把私钥加载进内存,然后给其他工具用。
好处是——私钥不用反复解密。你只在添加密钥时输一次密码,之后 PuTTY、plink、pscp 都能直接用,不用每次都输。
用法:启动 Pageant(会缩到系统托盘)→ 双击图标 → Add Key → 选择 .ppk → 输入密码。
之后这些命令就不用再认证了:
plink user@hostname "ls -l"pscp local_file.txt user@hostname:/remote/path/它俩会自动去找 Pageant,不需要额外加参数。
如果还是提示输密码,加 -v 看详细日志,观察有没有去查 Pageant。
要让 Pageant 开机自动加载密钥,可以在快捷方式的目标后面直接跟上密钥路径:
"C:\Program Files\PuTTY\pageant.exe" "C:\keys\mykey.ppk""密钥不能用"这个说法不准确——多数时候是格式不匹配。
钥匙是同一把,盒子不一样。
遇到这类问题,按这个顺序:
搞清楚这三点,PuTTY 的密钥问题基本都能定位。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。