ssh详解与配置免密钥互信过程

ssh简介

官网:https://www.openssh.com/
在这里插入图片描述

OpenSSH是用于使用SSH协议进行远程登录的主要连接工具。它对所有流量进行加密,以消除窃听,连接劫持和其他攻击。此外,OpenSSH还提供了一整套安全的隧道功能,多种身份验证方法和复杂的配置选项。

OpenSSH套件包含以下工具:
远程操作使用 ssh, scp和 sftp完成。 使用ssh-add, ssh-keysign,ssh-keyscan和 ssh-keygen进行密钥管理 。 服务 端由sshd, sftp-server和 ssh-agent组成。

ssh(Secure Shell Protocol,安全的壳协议)

ssh是建立在应用层基础上的安全协议,其SSH客户端适用于多种平台,可以有效防止远程管理过程中的信息泄露问题。
ssh(SSH客户端)是用于登录到远程计算机并在远程计算机上执行命令的程序。它旨在通过不安全的网络在两个不受信任的主机之间提供安全的加密通信。X11连接,任意TCP端口和 UNIX域套接字也可以通过安全通道转发。
ssh本身提供类似两个服务的功能:一个是类似Telnet的远程连接使用shell的服务;另一个是类似ftp服务的ftp-server,提供安全的ftp服务。

ssh的基本框架

SSH协议框架中最主要的部分是三个协议: 传输层协议、 用户认证协议和连接协议。 同时,SSH协议框架还为许多高层的网络安全应用协议提供扩展的支持。
(1)在SSH的协议框架中, 传输层协议( TheTransport Layer Protocol),提供服务器认证、 数据机密性、 信息完整性等支持;
(2)用户认证协议(The User Authentication Protocol) 为服务器提供客户端的身份鉴别;
(3)连接协议 (The Connection Protocol ) 将加密的信息隨道复用成若干个逻辑通道, 提供给更高层的应用协议使用;
注:各种高层应用协议可以相对地独立于SSH基本体系之外, 并依靠这个基本框架, 通过连接协议使用SSH的安全机制。

在这里插入图片描述

SSH服务由服务端软件OpenSSH(openssl)和客户端(常见的有SSH),SecureCRT,Putty,xshell组成,SSH服务默认使用22端口提供服务,它有两个不兼容的SSH协议版本,分别是1.x和2.x。

查看服务端的相关软件包

[root@chen ~]# rpm -qa | grep 'openss'
apr-util-openssl-1.6.1-6.el8.x86_64
openssl-1.1.1c-15.el8.x86_64
openssl-libs-1.1.1c-15.el8.x86_64
openssh-server-8.0p1-4.el8_1.x86_64
openssh-8.0p1-4.el8_1.x86_64
openssh-clients-8.0p1-4.el8_1.x86_64
xmlsec1-openssl-1.2.25-4.el8.x86_64
openssl-pkcs11-0.4.10-2.el8.x86_64

OpenSSH同时支持SSH1.x和2.x。用SSH 2.x的客户端程序不能连接到SSH 1.x的服务程序上(向下兼容)。
SSH服务端是一个守护进程(daemon),它在后台运行并响应来自客户端的连接请求。SSH服务端的进程名为sshd,负责实时监听远程SSH客户端的连接请求,并进行处理,一般包括公共密钥认证,密钥交换,对称密钥加密和非安全连接等。这个SSH服务就是我们前面基础系统优化中保留开机自启动的服务之一。

ssh的工作过程
在整个通讯过程中,为实现SSH的安全连接,客户端和服务端主要经历五个阶段。

过程 简要说明
版本号协商阶段 SSH目前包括SSH1和SSH2两个版本,双方通过版本协商确定使用的版本
密钥和算法协商阶段 SSH支持多种加密算法,双方根据本端和对端支持的算法,协商出最终使用的算法–
认证阶段 SSH客户端向服务器发起认证请求,服务端对客户端进行认证
会话请求阶段 认证通过后,客户端向服务器发送会话请求
交互会话阶段 会话请求通过后,服务器端和客户端进行认证

一、版本协商阶段
1、服务器端打开端口22,等待客户端连接;
2、客户端向服务器端发起TCP初始连接请求,TCP连接建立后,服务器向客户端发送第一个报文,包括版本标志字符串,格式为“SSH-<主协议版本号>.<次协议版本号>.<软件版本号>”,协议版本号由主版本号和次版本号组成,软件版本号主要是为调试使用。
3、客户端收到报文后,解析该数据包,如果服务器的协议版本号比自己的低,且客户端能支持服务器端的低版本,就使用服务器端的低版本协议号,否则使用自己的协议版本号。
4、客户端回应服务器一个报文,包含了客户端决定使用的协议版本号。服务器比较客户端发来的版本号,决定是否能同客户端一起工作。如果协商成功,则进入密钥和算法协商阶段,否则服务器断开TCP连接。
说明:上述报文都是采用明文方式传输。

二、密钥和算法协商阶段
1、服务器端和客户端分别发送算法协商报文给对端,报文中包含自己支持的公钥算法列表、加密算法列表、MAC(Message Authentication Code,消息验证码)算法列表、压缩算法列表等等。
2、服务器端和客户端根据对端和本端支持的算法列表得出最终使用的算法。
3、服务器端和客户端利用DH交换(Diffie-Hellman Exchange)算法、主机密钥对等参数,生成会话密钥和会话ID。
由此,服务器端和客户端就取得了相同的会话密钥和会话ID。对于后续传输的数据,两端都会使用会话密钥进行加密和解密,保证了数据传送的安全。在认证阶段,两端会使用会话用于认证过程。

会话密钥的生成:
1、客户端需要使用适当的客户端程序来请求连接服务器,服务器将服务器的公钥发送给客户端。(服务器的公钥产生过程:服务器每次启动sshd服务时,该服务会主动去找/etc/ssh/ssh_host*文件,若系统刚装完,由于没有这些公钥文件,因此sshd会主动去计算出这些需要的公钥文件,同时也会计算出服务器自己所需要的私钥文件。)
2、服务器生成会话ID,并将会话ID发给客户端。
3、若客户端第一次连接到此服务器,则会将服务器的公钥数据记录到客户端的用户主目录内的~/.ssh/known_hosts。若是已经记录过该服务器的公钥数据,则客户端会去比对此次接收到的与之前的记录是否有差异。客户端生成会话密钥,并用服务器的公钥加密后,发送给服务器

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值