翻译文章,原文:Understanding SSH workflow[1]
Telnet用于与远程服务器通信。但是,Telnet并不是一种安全的通信协议,因为它不使用任何安全机制,并且以纯文本形式(包括密码)在网络/互联网上传输数据,因此任何人都可以嗅探数据包以获取重要信息。因此,为了克服这个问题,SSH诞生了。现在,让我们继续了解SSH。
SSH,也称为安全外壳程序或安全套接字外壳程序,是一种网络协议,可为管理员提供一种访问远程计算机的安全方式。SSH在两方(客户端和服务器)之间建立了加密保护的连接,对每一方进行身份验证,并来回传递命令和输出。
SSH协议使用对称加密,非对称加密和哈希来确保信息的传输。客户端和服务器之间的SSH连接分为三个阶段:
1.客户端验证服务器2.生成会话密钥以加密所有通信3.客户端认证
现在,我将在不同的部分中讨论这些阶段。
客户端启动与服务器的SSH连接。服务器侦听默认端口22(可以更改此端口)以进行SSH连接。此时,将验证服务器身份。有两种情况:
1.如果客户端是第一次访问服务器,则要求客户端通过验证服务器的公共密钥来手动认证服务器。服务器的公共密钥可以使用 ssh-keyscan 命令找到,也可以在其他位置找到(WHERE?google!)。一旦密钥被验证,服务器信息就会添加到客户端计算机~/.ssh目录中的known_hosts文件中。 known_hosts文件包含有关客户端所有已验证服务器的信息。
2.如果客户端不是第一次访问服务器,则将服务器的身份与known_hosts文件中先前记录的信息进行匹配以进行验证。
验证服务器后,双方使用称为 Diffie-Hellman[2] 算法的某种版本协商会话密钥。该算法的设计方式是,双方在会话密钥的生成中均会做出同等的贡献。生成的会话密钥是共享对称密钥,即,相同的密钥用于加密和解密。
最后阶段涉及客户端的身份验证。使用SSH密钥对进行身份验证。顾名思义,SSH密钥对只不过是用于两个不同目的的两个密钥对。一种是用于加密数据并可以自由共享的公钥。另一个是私钥,用于解密数据,并且永远不会与任何人共享。
建立对称加密后,将对客户端进行身份验证,如下所示:
1.客户端首先向服务器发送要验证的密钥对的ID。
2.服务器检查客户端尝试登录的帐户的authorized_keys文件中的密钥ID。
3.如果在文件中找到具有匹配ID的公钥,则服务器将生成一个随机数,并使用该公钥对数字进行加密并发送此加密的消息。
4.如果客户端具有正确的私钥,它将解密该消息以获得服务器生成的随机数
5.客户端将获得的随机数与共享会话密钥结合在一起,并计算该值的MD5哈希值。
6.然后,客户端将此MD5哈希发送回服务器,作为对加密号码消息的答复。
7.服务器使用相同的共享会话密钥和发送给客户端的原始号码自行计算MD5值。它将自己的计算结果与客户端发回的计算结果进行比较。如果这两个值匹配,则证明该客户端拥有私钥,并且该客户端已通过身份验证
密钥的不对称允许对客户端进行身份验证,因为客户端只有在具有正确的关联私钥的情况下才能解密消息。
该博客的主要思想是帮助读者了解什么是ssh以及用户尝试登录到远程服务器时发生的情况。
[1] Understanding SSH workflow: https://medium.com/@Magical_Mudit/understanding-ssh-workflow-66a0e8d4bf65
[2] Diffie-Hellman: https://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange