Xshell配置ssh免密码登录-**公钥(Public key)

目录

1. SSH认证简介

2.https和ssh的安全机制原理

2.1 https 安全传输原理

2. 2 ssh 密码登录

2.3 ssh 公钥认证登录

3. Xshell配置ssh免密码登录


1. SSH认证简介

SSH为Secure Shell的缩写,由 IETF 的网络工作小组(Network Working Group)所制定,SSH 为建立在应用层和传输层基础上的安全协议。SSH是目前可靠的,专为远程登录会话和其他网络服务提供安全性的协议。常用于远程登录,以及用户之间进行资料拷贝。利用SSH协议可以有效防止远程管理过程中的信息泄露问题。使用SSH服务,需要安装相应的服务器和客户端。客户端和服务器的关系:如果,A机器想被B机器远程控制,那么,A机器需要安装SSH服务器,B机器需要安装SSH客户端。SSH是一种加密的网络传输协议,可在不安全的网络中为网络服务提供安全的传输环境。SSH通过在网络中创建安全隧道来实现SSH客户端与服务器之间的连接。虽然任何网络服务都可以通过SSH实现安全传输,SSH最常见的用途是远程登录系统,人们通常利用SSH来传输命令行界面和远程执行命令。ssh 协议交互过程如下:

Xshell配置ssh免密码登录-**公钥(Public key)

 

  •  

下面就对这两种方法展开介绍:

  •  基于密码的安全验证

是使用自动生成的公钥-私钥对来简单地加密网络连接,随后使用密码认证进行登录。具体过程如下

2.https和ssh的安全机制原理

2.1 https 安全传输原理

                       Xshell配置ssh免密码登录-**公钥(Public key)

  1. 客户端请求服务端
  2. 服务端将用于数据加密的公钥 cert_pub 返回给客户端
  3. 客户端对公钥进行验证(有没过期啊,办法机构合不合法啊之类的)
  4. 客户端生成用于加密本次会话数据的** sess_key,并通过服务端返回的 cert_pub 进行加密发送给服务端(安全传输,只有 cert_pri 的拥有者才能解密出此数据)
  5. 服务端通过私钥 cert_pri 解密拿到 sess_key,至此,服务端和客户端都拿到了加密会话传输数据的 sess_key
  6. 剩下的事件就是用 sess_key 加密发送数据,接受数据后用 sess_key 解密的工作了

2. 2 ssh 密码登录

  1. 客户端发送登录请求,ssh [email protected]
  2. 服务端接受请求,将服务端的公钥 ser_rsa.pub 发送给客户端
  3. 客户端输入密码,密码使用 ser_rsa.pub 加密后发送给服务端(敏感信息安全传输了)
  4. 服务端接受加密后的密码,使用服务端私钥 ser_rsa 解密,匹配认证密码是否合法
  5. 客户端生成会话数据加密 sess_key,使用 ser_rsa.pub 加密后传输给服务端(敏感信息安全传输了)
  6. 服务端获取到后使用 ser_rsa 解密,客户端和服务端通过 sess_key 进行会话数据安全传输

2.3 ssh 公钥认证登录

  所谓的**认证,实际上是使用一对加密字符串,一个称为公钥(public key), 任何人都可以看到其内容,用于加密;另一个称为**(private key),只有拥有者才能看到,用于解密。 通过公钥加密过的密文使用**可以轻松解密,但根据公钥来猜测**却十分困难。ssh 的**认证就是使用了这一特性。服务器和客户端都各自拥有自己的公钥和**。

  • cli_pub  客户端公钥
  • cli_pri  客户端**
  • ser_pub  服务器公钥
  • ser_pri  服务器**

在认证之前,客户端需要通过某种方法将公钥 cli_pub 注册到服务器上。认证过程分为两个步骤。

1. 会话**(session key)生成

  1. 客户端 请求连接服务器,服务器将 ser_pub 发送给客户端。
  2. 服务器生成会话ID(session id),设为 sess_id,发送给客户端。
  3. 客户端生成会话**(session key),设为 sess_key,并计算 sess_xor = sess_id xor sess_key。
  4. 客户端将 sess_xor 用 ser_pub 进行加密,结果发送给服务器。(敏感信息加密传输)
  5. 服务器用 ser_pri 进行解密,获得 sess_xor。
  6.  服务器进行 sess_xor xor sess_id 的运算,获得 sess_key。
  7.  至此服务器和客户端都知道了会话** sess_key,以后的传输都将被 sess_key 加密。

2. 认证

  1. 服务器 生成随机数 random_str,并用 cli_pub 加密后生成结果 ency(random_str),发送给客户端
  2. 客户端使用 cli_pri 解密 ency(random_str) 得到 random_str
  3. 客户端计算 sess_key+random_str 的 md5 值 cli_md5(sess_key+random_str),sess_key 为上一步得到的会话**
  4. 服务器计算 sess_key+random_str 的 md5 值 ser_md5(sess_key+random_str)
  5. 客户端将 cli_md5(sess_key+random_str) 发送给服务器
  6. 服务器比较 ser_md5(sess_key+random_str) 和 cli_md5(sess_key+random_str),两者相同则认证

3. 传输

  1. 传输的话就使用会话** sess_key 进行加密和解密传输Xshell配置ssh免密码登录-**公钥(Public key)

参考:https://blog.csdn.net/marywang56/article/details/78784608

3. Xshell配置ssh免密码登录

参考:https://www.cnblogs.com/dadonggg/p/8350423.html

ssh-copy-id三步实现SSH无密码登录和ssh常用命令

https://blog.csdn.net/liu_qingbo/article/details/78383892