SSH认证
一、SSH
在认证之前已经协商好了一个会话密钥(算法协商+公钥传输+…+会话密钥生成),然后在作用在后续的认证过程和所有数据传输过程中。认证过程只是一个身份验证登陆流程,只是决定是否要继续建立通道保持通信,下文讨论的就是不同的认证方式。
1 |
|
基于密码的验证
- 客户端发送用户名和密码用先前协商的密钥加密后发送到服务器进行验证
- 服务端通过本地账号去查,匹配上就验证成功
基于公钥的验证
- 生成密钥对:首先在客户端生成一个密钥对,包括一个公钥和一个私钥。公钥可以公开,但私钥必须保密。
- 上传公钥到服务器:然后,将公钥上传到服务器,并添加到~/.ssh/authorized_keys文件中。这个文件存储了所有允许SSH密钥认证的公钥。
- 当认证流程开始时:客户端会发送一个包含公钥的消息给服务器。
- 服务器验证公钥:服务器会检查客户端发送的公钥是否在~/.ssh/authorized_keys文件中。如果公钥存在,服务器就知道客户端是一个可信的用户。
- 服务器发送挑战消息:服务器然后生成一个随机数(也被称为挑战,这个是最终是被双重加密的),并将其发送给客户端。
- 客户端响应挑战:客户端使用私钥对这个随机数进行加密,然后将加密的随机数发送回服务器。这个加密的随机数也被称为响应。
- 服务器验证响应:服务器使用公钥解密响应,如果解密后的随机数与最初发送的随机数匹配,那么服务器就认为客户端是一个合法用户,并允许建立SSH连接。
这个过程和第一步的协商会话密钥类似
我们常用的 github ,往 github setting里面设置 id_rsa.pub就是这种方式的操作。这是一种更安全的身份验证方式,它需要一对公钥和私钥。公钥存储在远程服务器上,而私钥保管在本地。只有拥有私钥的用户才能登录到服务器。这种方式的安全性比基于密码的验证要高。
注意:远程主机的/etc/ssh/sshd_config这个文件,检查下面几行前面”#”注释是否取掉。
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
如果没有,ssh 公钥登录方式是无效的,需要打开注释,然后重启远程主机的ssh服务。
Pem私钥认证
当你购买一个 ECS(Elastic Compute Service)实例或者类似的云服务器时,有时会提供一个 .pem 文件。这个 .pem 文件实际上是包含了私钥的文件,通常用于SSH连接到你的云服务器。公钥会被安装在你的 ECS 实例上(~/.ssh/authorized_keys),而私钥则会被提供给你(通常以 .pem 文件的形式)。你可以使用这个私钥文件来 SSH 登录到你的 ECS 实例。
.pem私钥登录相比公钥认证少了公钥传输的过程,降低了非对称加密过程中公钥劫持替换的中间人攻击的风险

本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Jim zhang's Blog!