检查SSH公钥的正确性?

15

我要求用户提供他们的 public "id_rsa.pub" ssh 密钥,然后将其放置在“/home/theiraccount/.ssh/authorized_keys”中,以便他们可以通过 SSH 登录到服务器。我想自动化这个过程。

有没有办法对他们给我的字符串进行检查(无论是程序化还是其他方式)? 我想验证 sshd 是否能够读取文本,并且它实际上看起来像一个有效的公钥(并且没有损坏)?

换句话说,id_rsa.pub 文件的格式是什么? 如果有人在字段中输入它,那么我可以在表单处理程序脚本中编写什么来验证它是完整和正确的?


1
这是一个链接,链接至Python编写的验证密钥的函数:https://github.com/jirutka/ssh-ldap-pubkey/blob/master/bin/ssh-ldap-pubkey#L264。假设你只对基本验证感兴趣,其算法如下:1. 分割内容,第一个元素为"kt"=密钥类型,第二个元素为密钥字符串。2. 对密钥字符串进行Base64解码。3. 前4个字节是整数"ktl",对应于密钥类型字符串的长度。4. 获取解码后字符串中第4个到第4 + "ktl"个字符。5. 它应该与密钥类型"kt"匹配。 - Jordan Reiter
1个回答

32

ssh-keygen 可以用来计算密钥文件的指纹,如果没有传递密钥,则会失败:

ssh-keygen -l -f id_rsa.pub

另一种可能性是使用ssh-vulnkey,这样做的好处在于同时检查密钥是否在已知的黑名单中。


不适用于带有密码的密钥。 - vidstige
@vidstige 一个由密码保护的公钥?为什么?公钥不应该需要由密码保护,私钥才需要,并且您不会将其提供给任何人。哪种工作流需要对私钥进行合理性检查? - mata
对我来说,即使有密码短语也可以工作。 - inquisitive

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接