使用这种方法:
ssh -i private key [email protected]
我说这是我的私钥,并将ubuntu_A
我的私钥与中的公钥匹配authorized_keys
。
ssh-copy-id
我对来自的方法 感到困惑ubuntu_B
。我做了:
ssh-copy-id 1.2.3.4
它将我的公钥复制到authorized_key
文件中。
现在,当我这样做时,ssh 1.2.3.4
我可以登录ubuntu_A
。使用此方法,如何ubuntu_A
知道中的私钥ubuntu_B
。
我如何才能看到它正在验证私钥?
答案1
从技术上讲,远程服务器本身看不到您的私钥。您的系统将密钥的 ID(与公钥上的 ID 匹配)提供给服务器以启动该过程。
来自 Digital Ocean 教程了解 SSH 加密和连接过程,特别是“验证用户对服务器的访问”部分以及关键的身份验证过程部分:
公钥用于加密数据,只有私钥才能解密。公钥可以自由共享,因为虽然它可以为私钥加密,但没有方法可以从公钥派生出私钥。
使用 SSH 密钥对的身份验证在建立对称加密后开始,如上一节所述。该过程如下:
- 客户端首先向服务器发送它想要验证的密钥对的 ID。
- 服务器检查客户端尝试登录的帐户的 authorized_keys 文件中的密钥 ID。
- 如果在文件中找到具有匹配 ID 的公钥,则服务器会生成一个随机数,并使用该公钥对该数字进行加密。
- 服务器向客户端发送此加密消息。
- 如果客户端确实拥有相关的私钥,它将能够使用该密钥解密消息,从而显示原始号码。
- 客户端将解密的数字与用于加密通信的共享会话密钥相结合,并计算该值的 MD5 哈希值。
- 然后,客户端将此 MD5 哈希值发送回服务器,作为对加密数字消息的答复。
- 服务器使用相同的共享会话密钥和它发送给客户端的原始数字自行计算 MD5 值。它将自己的计算结果与客户端发回的值进行比较。如果这两个值匹配,则证明客户端拥有私钥,并且客户端已通过身份验证。
如您所见,密钥的不对称性允许服务器使用公钥加密发送给客户端的消息。然后,客户端可以通过正确解密消息来证明其拥有私钥。所使用的两种加密类型(对称共享密钥和非对称公私钥)都能够在此模型中发挥各自的优势。
(不幸的是,没有办法进一步简化上述解释。)