目录
一、ssh协议
1.SSH协议
2.SSH协议工作过程
(1)第一阶段:TCP三次握手版本协商过阶段:
(2)第二阶段:协商算法和确定对称秘钥阶段
(3)第三阶段:认证阶段:
(4)第四阶段:会话请求阶段:
(5)第五阶段:交互会话阶段:
二、实现两台Linux主机相互免密登录
1.首先我们要确保两台主机都部署了SSH服务,如果没有部署我们需要下载openssh,下载完成之后我们确保ssh相关服务启动,并在两台主机上均关闭防火墙。
2.在客户端生成公钥信息,通过ssh-copy命令发送给服务端,客户端的公钥文件存储在服务端 /root/.ssh里如下图所示,现在131客户端的公钥文件在133的/root/.sh里面,并且131主机在登陆133主机时实现了免密登录。
3.将133主机当成用户端、131主机当成服务端重复步骤二即可实现两台Linux主机相互免密登录。
SSH(Secure Shell Protocol,安全的壳程序协议)它可以通过数据包加密技术将等待传输的数据包加密后再传输到网络上。ssh协议本身提供两个服务器功能:一个是类似telnet的远程连接使用shell的服务器;另一个就是类似ftp服务的sftp-server,提供更安全的ftp服务。
目前包括SSH1和SSH2两个版本,双方通过版本协商确定使用的版本。服务端默认已经开启ssh服务,打开了22号端口,等待客户端来连接服务器向客户端发送第一个报文: 告诉了客户端使用了ssh版本以及软件信息;客户端收到报文之后,拿出服务器的ssh版本,看一下自己是否支持,如果支持使用该版本
SSH支持多种加密算法,双方根据本端和对端支持的算法,协商出最终使用的算法:
对称加密:同一秘钥既可以进行加密也可以进行解密
优势:使用一个秘钥它的加密效率高一些(快一些)
缺陷:秘钥传输的安全性(在网络传输中不传输秘钥)
应用: 传输数据(数据的双向传输)
非对称加密:产生一对秘:公钥:公钥加密 私钥:私钥解密(不会进行网络传输)
缺陷:公钥的安全性 客户端去访问一个服务器(假设数据被我们的hacker拦截了,hacker发送了自己的公钥给客户端,客户端用 hacker的公钥对数据进行加密,然后hacker用自己的私钥进行解密。从而获取到用户传送的隐私(用户和密码)信息,进一步对服务器动机);传送速度慢(效率低)
优势:安全性更高
应用: 单向的认证阶段(建立安全的连接保证后面对称加密的秘钥安全)
SSH客户端向服务端发起认证请求,服务端对客户端进行认证
(1)基于口令的认证:客户端在使用SSH协议连接服务端时,会将客户端的公钥信息存储在服务端上,下一次该客户端登录的时候服务端查找到该用户的公钥时则不会进行验证,客户端直接输入密码即可。
(2)基于公钥的认证:
1.Client将自己的公钥存放在Server上,追加在文件authorized_keys中。
2.Server端接收到Client的连接请求后,会在authorized_keys中匹配到Client的pubKey,并生成随机数R,用Client的公钥对该随机数进行加密得到pubKey(R),然后将加密后信息发送给Client。
3.Client端通过私钥进行解密得到随机数R,然后对随机数R和本次会话的SessionKey利用MD5生成摘要Digest1,发送给Server端。
4.Server端会也会对R和SessionKey利用同样摘要算法生成Digest2。
5.Server端会最后比较Digest1和Digest2是否相同,完成认证过程。
认证通过后,客户端向服务器端发送会话请求,建立新的连接
会话请求通过后,服务器端和客户端进行信息的交互
rpm -qa | grep ssh 检查主机是否部署ssh相关服务
yum install openssh -y 下载ssh
ps -aux |grep sshd 检查ssh相关服务是否启动
systemctl stop/disable firewalld 关闭/永久关闭 防火墙
客户端:
ssh-keygen -t rsa 生成公钥登录信息
ssh-copy-id 用户名@ip地址 将公钥信息发送给服务端
ssh 用户名@ip地址 实现ssh登录
服务端:ll /root/.ssh 查看客户端的公钥信息是否发送过来