Security 如何在每个连接上生成客户端ssh密钥?

Security 如何在每个连接上生成客户端ssh密钥?,security,authentication,privacy,ssh-keys,ca,Security,Authentication,Privacy,Ssh Keys,Ca,目前,我认为客户端上使用的公钥被重复使用了好几次(我认为只要配置没有改变就行)。我假设我们使用的是密码方法 这让我担心。我希望我的ssh客户端在每个连接上自动生成RSA密钥(但客户端密钥必须保持不变,以确保真实性和安全性) 这可能吗 谢谢 编辑:请参阅注释3。SSH中的公钥用于标识客户端。 私钥用于证明用户不是冒名顶替者 服务器只知道公钥。如果你为每个连接更改公钥,就像为每个连接更改用户名一样。因此服务器知道用户“john”,但你说“I'm Joe”。不管你是否能证明你是Joe,服务器都不知道你

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

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

这可能吗

谢谢


编辑:请参阅注释3。

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

服务器只知道公钥。如果你为每个连接更改公钥,就像为每个连接更改用户名一样。因此服务器知道用户“john”,但你说“I'm Joe”。不管你是否能证明你是Joe,服务器都不知道你,所以不会让你进去


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

缺少的是公钥和私钥以加密方式相互绑定。当私钥k生成ey时,相应的公钥也是。使用一个密钥加密某些内容,并且只能使用另一个密钥对其进行解密。具有公钥的任何人都可以验证消息是否只能来自具有私钥的人,因为存在此加密关系

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

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


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

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


您似乎对SSH协议有着深刻的误解。我只能建议阅读RFC 4252来澄清问题。

投票结果接近吗?作为一个程序员,SSH不是一个必不可少的工具吗?有几件事对这个问题没有意义。您询问公钥身份验证,然后说您假设密码身份验证。然后您说您希望客户端每次生成一个新密钥,但客户端的密钥不能更改。请澄清这个问题。当然,这是一个密码验证。但我对协议的谈判方式感兴趣。在这个身份验证过程中,客户端(或者服务器,我不知道)发送一个公钥,该公钥允许交换对称密钥来加密主机和客户端之间的每个数据。我想知道客户端是否发送了公钥,如果是,它是否经常更改此公钥。@Creasixtine您在9年内找到解决方案了吗?