SSH协议
SSH是一种网络协议,我们常说的 ssh 一般指其实现,即 OpenSSH,在 shell 中,也就是 ssh 命令。Secure Shell(安全外壳协议,简称SSH)是一种加密的网络传输协议,可在不安全的网络中为网络服务提供安全的传输环境。SSH通过在网络中建立安全隧道来实现SSH客户端与服务器之间的连接。
SSH 的原理跟 HTTPS 差不多,都是基于 TCP 和 非对称加密进行的应用层协议。它跟 HTTPS 的不同之处在于 HTTPS 通过 数字证书 和 数字证书认证中心 来防止中间人攻击,而 ssh 服务器的公钥没有人公证,只能通过其公钥指纹来人工确定其身份。
通过使用SSH可以把传输数据进行加密、有效防止传输过程中信息泄露问题。
从客户端的角度来看,有两种验证方式:基于密码、基于密钥。
基于密码
- 客户端向服务端发起SSH请求。
- 服务端接受到请求后,发送公钥给客户端。
- 客户端输入用户名和密码,然后经过公钥加密,回传给服务端。
- 服务端经过私钥解密后,与本地的用户名和密码进行对比,成功就登录,否则再次验证。
基于密钥
- 首先在客户端生成一对密钥(公钥、私钥);
- 客户端将生成的公钥拷贝到需要访问的服务端机器上;
- 当客户端再次发送一个连接请求,包括 ip、用户名;
- 服务端得到客户端的请求后,会到 authorized_keys 中查找,如果有相
应的 IP 和用户,就会随机生成一个字符串,例如:qwer; - 服务端将使用客户端拷贝过来的公钥对随机字符串 qwer 进行加密,然后
发送给客户端; - 得到服务端发来的消息后,客户端会使用私钥进行解密,然后将解密后
的字符串发送给服务端; - 服务端接受到客户端发来的字符串后,跟之前的字符串进行对比,如果一致,就允许免密码登录。
比对
基于密码遇到中间人攻击容易泄露密码,基于密钥只要客户端的私钥不泄露就比较安全把。