SSH 公钥检查器
把 authorized_keys 或 known_hosts 里已有的行贴进来,它会告诉你其中究竟是什么。每个密钥都会列出算法、直接从密钥材料中读出而非按行首名称猜测的真实长度、当前 OpenSSH 输出格式的 SHA256 指纹、老服务器和一些云控制台仍在显示的冒号分隔 MD5 指纹,以及附带的注释和选项。你打开那个文件想弄清的问题,通常到这里就有了答案:这六个里哪一个是丢掉的那台笔记本,这个主机密钥是否和文档公布的指纹一致。它还会揪出扫一眼密钥行根本看不出来的问题。算法名会写两遍——行首一次,base64 数据块内部一次——而服务器真正比对的只有后者,所以被复制粘贴改了名字的密钥看上去完全正常,却会悄无声息地永远认证失败。与所属算法不符的 ECDSA 曲线名、base64 能解开但内部被截断的数据块、低于 2048 位的 RSA,以及 OpenSSH 在 7.0 默认禁用、9.8 彻底移除的 ssh-dss,同样如此。如果你误贴了私钥,它会拒绝处理并明确告知。全部在浏览器中运行,密钥不会上传。
使用方法
- 粘贴一行或多行公钥——整份 authorized_keys 或 known_hosts 文件都可以,以 # 开头的注释行会被跳过。
- 与公布的主机密钥指纹核对时用 SHA256;如果你要核对的系统仍然只输出旧格式,就用 MD5。
- 根据密钥长度和算法找出该轮换的条目:所有 ssh-dss,以及任何低于 2048 位的 RSA。
- 删除某一行之前,先看注释和选项,弄清每个密钥属于哪台机器。
- 标成琥珀色的都是行的外观与实际行为不符的密钥,先读警告再决定是否信任该条目。
常见问题
- 为什么我的指纹和 ssh-keygen 输出的不一样?
- 最可能的原因是你在比较两种不同的哈希形式。从 OpenSSH 6.8 起默认是以去掉填充的 base64 显示的 SHA256,形如 SHA256:uNiVzt…;在此之前是冒号分隔的十六进制 MD5。两者是对完全相同字节的指纹,谈不上哪个更正确,但外观毫无相似之处。本工具两种都输出,你可以按对方展示的那种来比对。如果两种形式都对不上,那就是密钥本身不同——指纹只覆盖 base64 数据块,所以改注释或改选项都不会影响它。
- 行首的算法和密钥内部的算法有什么区别?
- OpenSSH 的公钥行把算法名写了两遍:一次是行首的第一个词,一次是 base64 数据块内的第一个带长度前缀的字段。属于密钥本身的只有数据块里那份,行首那个只是标签,而日常流程中没有任何环节会检查两者是否一致。因此手工编辑过的行,或者复制粘贴时把两个密钥拼错的行,可能写着 ssh-rsa,里面装的却是 Ed25519 密钥。它在文件里看起来再普通不过,就是死活认证不过去。本工具会比对两者,不一致时告诉你。
- 在这里粘贴密钥安全吗?
- 公钥安全——它本来就是设计成公开的,而且本页面不会把它发送到任何地方。解析和两种哈希全部在你的浏览器中完成,你可以自己验证:打开页面后断开网络,它照常工作。私钥则完全是另一回事:不要把私钥粘贴到任何网页,包括本页。如果输入以 PRIVATE KEY 头开始,本工具会拒绝处理并明确提示,而不是默默解析。
- SSH 密钥该用多少位?
- 新建密钥通常推荐 Ed25519:固定 256 位,短小快速,没有可以配错的参数。如果因为老服务器必须用 RSA,2048 位是当前下限,4096 位是常见选择;低于 2048 位,现在的 OpenSSH 和大多数证书颁发机构都会拒绝。要注意的是,RSA 的位数和 Ed25519 的位数不是可以直接比较的量——两者度量的东西不同,256 位的 Ed25519 密钥强度大致相当于 3072 位的 RSA。在无法使用 Ed25519 的环境里,nistp256 上的 ECDSA 也可以。
- 我的 ssh-dss 密钥明明能用,为什么被标记?
- 因为它只是还有某个老东西在接受它。OpenSSH 中的 DSA 密钥固定为 1024 位,低于当前所有推荐值,而且该实现对糟糕的随机数格外敏感——随机数只要重复一次,私钥就会被直接泄露。OpenSSH 在 7.0 默认禁用了 ssh-dss,9.8 更是把相关代码整个删除,所以你一旦升级服务器,它就会毫无提示地不再接受这个密钥。如果 authorized_keys 里还留着这种密钥,最好在升级之前而不是之后把它换掉。
- 能读 known_hosts 行和证书吗?
- known_hosts 行可以处理:开头的主机模式会被分离出来,而不会被误当成密钥的一部分,其中也包括以 |1| 开头的哈希条目和 @cert-authority、@revoked 这类标记。authorized_keys 的选项串(command="…"、no-pty、from="…")同样会被分开。OpenSSH 证书(*-cert-v01@openssh.com 系列)会被识别并计算指纹,但其主体不做解码,所以在这里看不到主体名称和有效期。
相关工具
PGP 公钥检查器
解析 ASCII armor 格式的 OpenPGP 公钥:完整指纹、密钥 ID、算法、长度、创建与过期日期、用户 ID 和子密钥。
JWK 与 PEM 互转工具
把 JWK 或整个 JWKS 转成 PEM 公钥,也可反向转换,并给出每个密钥的 RFC 7638 指纹——全部在浏览器中完成。
PKCS#12 密钥库检查器
在浏览器里打开 .p12 / .pfx:输入密码前先看 MAC 和加密算法,输入后查看证书链、私钥,以及私钥与证书是否匹配。
JSON 键排序
按字母顺序排序 JSON 对象的键。可选递归进入嵌套对象,对整个文档做规范化。
JSON 扁平化 / 还原 (点号表示法)
将嵌套 JSON 扁平化为单层点号键,或从扁平键还原嵌套 JSON — 分隔符与数组表示法可配置,在浏览器内完全可逆。
EditorConfig 测试器
粘贴 .editorconfig 和一组文件路径,查看每个文件最终解析出的属性,以及每个值由哪一小节、哪一行决定。