1

目前,我认为在客户端使用的公钥被重复使用了几次(也许只要我认为配置没有改变)。我假设我们正在使用密码方法。

这让我很担心。我希望我的 ssh 客户端在每个连接上自动生成一个 RSA 密钥(但客户端密钥必须保持不变以确保真实性和

这可能吗 ?

谢谢。

编辑:请参阅评论#3。

4

3 回答 3

1

SSH 中的公钥用于识别客户端。私钥用于证明用户不是冒名顶替者。

服务器只知道公钥。如果您为每个连接更改它,就像为每个连接更改您的用户名一样。所以服务器知道用户“john”,但是你说“我是 Joe”。不管你能不能证明你是乔,服务器不认识你,所以它不会让你进来。

它不像 SSL,您使用签名证书来证明您的身份,因此您可以随时更改密钥。在这里,公钥是您身份的一部分,因此您必须为每个连接使用相同的公钥。

于 2011-09-30T20:01:41.967 回答
0

您缺少的是公钥和私钥以加密方式相互绑定。生成私钥时,相应的公钥也随之生成。用一把钥匙加密东西,只能用另一把钥匙解密。由于这种加密关系,任何拥有公钥的人都可以验证消息只能来自拥有私钥的人。

当 SSH 会话启动时,每一方都使用此属性来验证对方。在握手期间,一个秘密(从技术上讲,它被称为“随机数”,它基本上是一个随机数)用接收者的公钥加密,然后用发送者的私钥签名。收到此信息后,接收者 a) 可以使用发送者的公钥验证签名;b) 是唯一可以解密消息的人。这验证了交换。如果这种握手发生在两个方向上,那么双方就有可能相互验证。这称为相互认证。

因此,重要的不是密钥的,而是绑定公钥和私钥的密码学原理。此过程提供了创建随机会话密钥并使用公钥/私钥对安全地交换它的能力,并且是 SSH(或 SSL 或 TLS)如何启动会话的核心。

这意味着您的问题的答案是,如果 SSH 设置为相互身份验证(即您不需要输入密码),您的客户端的公钥必须在服务器的密钥库中。由于您无法在不更改私钥的情况下更改公钥,因此每次更改密钥时都需要在服务器上重新加载公钥。

于 2011-10-01T04:14:58.750 回答
-1

如果您使用密码身份验证,则不使用客户端 RSA 密钥。如果您使用公钥身份验证,客户端密钥显然不能每次都更改,因为服务器需要已经知道它才能对您进行身份验证。

您似乎对 SSH 协议有很深的误解。我只能建议阅读 RFC 4252 来澄清事情。

于 2011-10-04T09:51:33.577 回答