我有一对公钥/私钥。我将公钥的内容放入服务器的 .ssh/authorized_keys 文件中。当我通过 SSH 进入服务器时,它会自动识别我的密钥并让我进入。
但是,如果我使用相同的公钥和不同的私钥并尝试 SSH,服务器不会让我进入。它如何知道要查找哪个私钥?
其次,我如何更改它应该接受这个特定公钥的私钥?
答案1
您如何为两个不同的私钥生成一个公钥?据我所知,使用 ssh-keygen 是不可能的。如果您没有这样做(我怀疑),那么您的问题只是您不了解非对称密钥原理:
在生成密钥对时,ssh-keygen 会生成一个私钥和一个公钥,它们相互匹配。你将公钥上传到服务器,在连接时,ssh 会使用你的私钥加密一些信息。然后,服务器会尝试使用你提供的公钥对其进行解密,如果成功,则服务器知道你拥有与它所知道的公钥匹配的正确私钥,从而验证你是 A) 你还是 B) 窃取了你的私钥的人。在情况 A 中,一切都很好;在情况 B 中,这只是你的错,你应该更好地保护你的私钥 :D
编辑:
如果您想使用两个不同的私钥,只需将它们匹配的公钥上传到服务器。
答案2
每个公钥都与一个私钥兼容,也就是说,服务器或任何其他计算机都可以使用公钥解密使用相应私钥加密的消息。但是,即使知道公钥,服务器也无法找到私钥。1公钥ssh-keygen
和私钥由您用来制作密钥的任何等效工具同时生成。
作为 SSH 登录过程(简化的“玩具”版本)的一部分,服务器会创建一个字符串,称为随机数,并将其发送到客户端(您的个人计算机)。客户端使用您的私钥加密随机数,并将结果发送回服务器。然后,服务器尝试使用文件中列出的每个公钥解密该结果.ssh/authorized_keys
,如果它找到一个解密过程产生原始随机数的公钥,它会授予您访问权限。请注意,在此过程中,服务器永远不会访问或了解私钥。
由于每个公钥都对应一个私钥,并且以密钥加密算法(RSA 或 DSA 或 ECDSA)固定的方式,因此您无法更改服务器将接受的给定公钥的私钥。如果您想使用不同的私钥,则需要生成相应的公钥并将其.ssh/authorized_keys
也放入文件中。
1从技术上讲是可以的,但需要的时间比宇宙的年龄还要长
答案3
authorized_keys 中可以有多个条目。我不知道服务器端用于匹配密钥对的具体方法,但它有效。
要回答第二个更重要的问题,您需要成对生成密钥。它们只能相互配合使用。您无法生成新的私钥来配合特定的公钥,反之亦然,您必须生成一对新密钥。
因此,如果您有 10 个用户(例如),您可以生成 10 个密钥对,这样当需要锁定单个用户时,您可以通过从 authorized_keys 中删除相应的公钥来实现,从而使相应的私钥失效。