抱歉,您的瀏覽器無法訪問本站
本頁面需要瀏覽器支持(啟用)JavaScript
了解詳情 >

SSH协议

SSH是一种网络协议,我们常说的 ssh 一般指其实现,即 OpenSSH,在 shell 中,也就是 ssh 命令。Secure Shell(安全外壳协议,简称SSH)是一种加密的网络传输协议,可在不安全的网络中为网络服务提供安全的传输环境。SSH通过在网络中建立安全隧道来实现SSH客户端与服务器之间的连接。

SSH 的原理跟 HTTPS 差不多,都是基于 TCP 和 非对称加密进行的应用层协议。它跟 HTTPS 的不同之处在于 HTTPS 通过 数字证书 和 数字证书认证中心 来防止中间人攻击,而 ssh 服务器的公钥没有人公证,只能通过其公钥指纹来人工确定其身份。

通过使用SSH可以把传输数据进行加密、有效防止传输过程中信息泄露问题。

从客户端的角度来看,有两种验证方式:基于密码、基于密钥。

基于密码

  1. 客户端向服务端发起SSH请求。
  2. 服务端接受到请求后,发送公钥给客户端。
  3. 客户端输入用户名和密码,然后经过公钥加密,回传给服务端。
  4. 服务端经过私钥解密后,与本地的用户名和密码进行对比,成功就登录,否则再次验证。

基于密钥

  1. 首先在客户端生成一对密钥(公钥、私钥);
  2. 客户端将生成的公钥拷贝到需要访问的服务端机器上;
  3. 当客户端再次发送一个连接请求,包括 ip、用户名;
  4. 服务端得到客户端的请求后,会到 authorized_keys 中查找,如果有相
    应的 IP 和用户,就会随机生成一个字符串,例如:qwer;
  5. 服务端将使用客户端拷贝过来的公钥对随机字符串 qwer 进行加密,然后
    发送给客户端;
  6. 得到服务端发来的消息后,客户端会使用私钥进行解密,然后将解密后
    的字符串发送给服务端;
  7. 服务端接受到客户端发来的字符串后,跟之前的字符串进行对比,如果一致,就允许免密码登录。

比对

基于密码遇到中间人攻击容易泄露密码,基于密钥只要客户端的私钥不泄露就比较安全把。