当您使用 SSH 而不生成密钥对时会发生什么?

当您使用 SSH 而不生成密钥对时会发生什么?

这似乎太简单了,我觉得我可能错过了一些明显的东西,但是当你使用 SSH 而不生成密钥对时实际上发生了什么?

有人问过这个问题的一个变体这里和答案一样,我一直明白,如果没有密钥对,SSH 将回到密码验证。

但是,那维基百科文章仅描述了两种使用方法。两种方法似乎都涉及密钥对,一个是手动生成的,另一个是自动生成的。

SSH 有多种使用方式,一种是使用自动生成的公私密钥对简单加密网络连接,然后使用密码认证登录。

另一种是使用手动生成的公钥-私钥对进行身份验证,允许用户或程序无需指定密码即可登录

当我创建与不安全服务器的 SSH 连接且不使用密钥对时,系统会提示我输入用户名和密码,然后我才能访问 shell。

密码回退是否是实现细节,因此不在 wiki 中?是否已按照建议自动生成密钥对(如果是,公钥是如何到达服务器的)?还是仅依靠密码。

如果仅使用密码和用户名组合,数据是否完全被加密?如果是,那么如何加密?

答案1

维基百科文章混淆了不同的 SSHv2 层。(可能是有些对于十年前的 SSHv1 来说是正确的,但它绝对被简化到了无意义的程度。)

SSHv2 密钥对(包括你的密钥对和服务器的密钥对)用于验证仅有的并且加密设置始终使用为每个连接临时生成的 DH 密钥对进行。服务器的 SSH 密钥对仅迹象加密设置数据(用于证明服务器的身份),而客户端的 SSH 密钥对根本不用于此过程。


在 SSHv2 中,当你连接到服务器时(两端交换支持的算法列表后),第一步是密钥交换,它会以某种方式生成用于加密整个连接的对称密钥。(作为此过程的副作用,服务器也经过了身份验证。)

大多数时候D—H或者体外循环氢可酮代谢将用于此,这意味着:

  1. 客户端生成 DH 密钥对(仅用于此连接)并发送其 DH 公钥。

  2. 服务器还会生成新的 DH 密钥对。它还会从磁盘加载其 SSH“主机密钥”密钥对。

    然后它迹象将 DH 公钥与 SSH 私钥结合起来,并将两个公钥(以及签名)发送给客户端。

  3. 客户端检查签名并验证服务器的 SSH 公钥是否在 known_hosts 中。

    然后它同时使用DH密钥(客户端的私钥 + 服务器的公钥)生成共享加密密钥,并丢弃其 DH 密钥对。

  4. 服务器还使用两个 DH 密钥(服务器的私钥 + 客户端的公钥)来生成相同的共享加密密钥,并且丢弃其 DH 密钥对。

  5. 双方均启用加密。

(还有一些其他密钥交换方法,但很少使用。)

下一步是客户端身份验证。请注意,此时连接已经加密,即使客户端的 SSH 密钥尚未使用!

  1. 客户端发送“服务请求”以进行客户端身份验证。

  2. 服务器提供一些机制——“密码”、“公钥”以及可能还有其他机制。

  3. 如果您有 SSH 密钥对,客户端将选择“公钥”,发送您的 SSH 公钥,并使用您的 SSH 私钥签署服务器提供的一些随机数据,以证明密钥所有权。

    如果您没有 SSH 密钥对,客户端将选择“密码”并直接发送您的密码 - 但是,仍然在加密隧道内。

相关内容