SSH全称是Secure Shell,SSH协议是基于应用层的协议,为远程登录会话和其他网络服务提供安全性的协议。SSH使用最多的是远程登录和传输文件,实现此功能的传统协议都不安全(ftp,telnet等),因为它们使用明文传输数据。而SSH在传输过程中的数据是加密的,安全性更高。

原理

SSH协议是基于非对称加密方法的,服务器和客户端都会生成自己的公钥和私钥

  1. 服务器建立公钥。若远程服务器是新系统,会在/etc/ssh目录下生成一个名为ssh_host_ecdsa_key.pub的公钥,同时生成一个名为ssh_host_ecdsa_key的私钥,这一对就是远程服务器的公钥与私钥。之后每回启动sshd服务的时候,系统会自动在此路径下查找公钥
  2. 客户端请求连接。
  3. 服务器发送公钥给客户端
  4. 客户端记录服务器公钥并计算自己的公私钥。客户端将服务器传来的公钥记录在~/.ssh/known_hosts中,若是已经记录有该服务器公钥,则比对是否一致,一致后就计算客户端自己的公私钥。
  5. 客户端发送自己的公钥给服务器。客户端将自己的公钥发送给服务器,这样服务器端就有客户端公钥+服务器自己私钥,客户端就有服务器公钥+客户端自己私钥,组成了非对称加密系统。
  6. 开始双向加解密。服务器发送数据:用客户端公钥加密,客户端收到数据后用自己私钥解密。客户端发送数据:用服务器公钥加密,服务器收到数据后用自己私钥解密。

组成

SSH主要有三部分组成

  1. 传输层协议 :[SSH-TRANS] 提供了服务器认证,保密性及完整性。此外它有时还提供压缩功能。 SSH-TRANS 通常运行在 TCP/IP连接上,也可能用于其它可靠数据流上。 SSH-TRANS 提供了强力的加密技术密码主机认证完整性保护。该协议中的认证基于主机,并且该协议不执行用户认证。更高层的用户认证协议可以设计为在此协议之上。
  2. 用户认证协议: [SSH-USERAUTH] 用于向服务器提供客户端用户鉴别功能。它运行在传输层协议 SSH-TRANS 上面。当 SSH-USERAUTH 开始后,它从低层协议那里接收会话标识符(从第一次密钥交换中的交换哈希 H )。会话标识符唯一标识此会话并且适用于标记以证明私钥的所有权。 SSH-USERAUTH 也需要知道低层协议是否提供保密性保护。
  3. 连接协议 :[SSH-CONNECT] 将多个加密隧道分成逻辑通道。它运行在用户认证协议上。它提供了交互式登录话路、远程命令执行、转发 TCP/IP 连接和转发 X11 连接。