SSH连接的建立方式
ssh可以通过密码和密钥(更加安全)这两种方式建立起客户端与 服务端的连接。
SSH连接的实现过程(假设通过密钥的方式连接)
- 当客户端发起一个ssh连接请求时,它首先会告诉服务端需要使用的公钥;
- 然后服务端会检查它的
~/authorized_keys
文件,这个文件中包含了所有已经保存的客户端公钥,一个公钥占据一行,这些公钥所对应的客户端可以实现免验证登录。 - 服务端如果在文件中找到了请求客户端所对应的公钥,就会生成一个随机字符串,并使用找到的公钥进行加密。这个加密后的信息只能被请求客户端的私钥所解密,然后服务端将这个加密后的字符串发送给请求客户端,以此来验证该客户端是否拥有私钥。
- 客户端收到来自服务端的加密字符串之后,会立即使用自己的私钥进行解密,并将解密后的随机字符串与之前协商好的会话id结合,生成一个md5加密的hash值,并回传给服务端。
- 由于服务端已经知道加密之前的随机字符串和会话id,因此,服务端会在本地将这个随机字符串和会话id进行hash,然后和客户端传过来的值进行比较,如果一致,则表示请求客户端确实拥有私钥,并允许建立连接。