1、SSH客户端与服务器连接的5个阶段
1)版本号协商,可能客户端和服务端的版本号不一致,服务端向客户端发送一个ssh协商,告诉客户端使用的ssh协议的版本号是多少,客户端在接收到了这个协商报文之后,会查看该报文,如果和服务端版本号相同,那就接受服务端的版本,进行接下来的会话协商。如果客户端发现服务端的版本和自己的不一样,那就主动的将自己使用的版本发送给服务端,告诉服务端,请你使用我的版本。最终的结果一定要是客户端和服务端版本一致,或者是客户端可以兼容服务端,不然,会话在这时候就断开了。
2)秘钥和算法协商阶段
两者协商之后,就使用相同的方式,通过协商好的秘钥算法,随机算出一个会话秘钥,这个会话是在客户端产生的,这个会话秘钥用于后期对数据进行加密,是对称加密的秘钥。服务器端会生成公钥,服务器会把公钥发送给客户端。客户端当前用户的家目录会产生一个.ssh的目录,该目录下存放的是服务器的公钥。客户端用服务器的公钥对会话秘钥加密,传输给服务器端,服务器用自己的私钥对会话秘钥进行解密来获取会话秘钥,服务器拿到会话秘钥之后,后期的数据加密就是安全的。
3)认证阶段
客户端向服务端发起,服务端向客户端进行认证,认证方式分为两种,基于口令的认证和基于秘钥的认证。基于秘钥的认证的秘钥和会话秘钥没有关系。
4)会话请求阶段
5)交互会话阶段
2、2种认证方式
口令认证 是对称加密
密钥认证是非对称加密
1) 基于口令:客户端使用服务器上的用户名和密码进行认证。使用会话秘钥加密后的用户名和口令发送给服务器。服务器通过会话秘钥解密后得到的待验证的用户名和口令,用其与本地的用户名和口令进行验证,验证通过,则向客户端返回认证成功的消息;则认证失败,则向客户端返回认证失败的消息。但是不能保证正在连接的主机就是需要连接的主机,可能会有其他的主机冒充真正的主机,会受到“中间人”攻击的威胁。
2)基于秘钥的认证:需要依靠RSA(一种非对称加密算法)秘钥,即客户端用户需要生成一对秘钥,并事先把公钥存放在服务器上。
(1)客户端向服务器发送连接请求,请求使用秘钥进行认证,请求报文中会包含IP地址和用户名同时包含自己的公钥。服务器收到请求后,先在即将进行远程登录用户的家目录下查找客户端用户之前存放的公钥(该公钥保存在用户家目录中)你要用服务器上哪个用户登录,就把公钥放在在哪个用户的家目录下
(2)如果两个秘钥一致,主机就使用存放的公钥加密“质询”(challenge)随机字符串,并把它发送给客户端。
3、安装openssh
1)配置yum库
2)安装ssh ---》默认已安装
yum -y install openssh openssh-clients
systemctl status sshd
systemctl enable sshd
ss -ntl | grep 22
netstat -ntlp | grep sshd
netstat -ntlp | grep 22
4、ssh的应用:当前主机172.16.30.10
以下讲解ssh命令、sftp命令、scp命令
1.对称加密 使用ssh命令、sftp命令、scp命令
当前主机A:172.16.30.10
ssh root@172.16.30.20-->在当前主机的产生~/.sshd/knows_hosts--->存放远程主机的公钥
sftp:
sftp root@172.16.30.20
scp:
当前主机A:172.16.30.10 远端主机B:172.16.30.20
格式:scp 源文件(本端/远端) 目标位置(本端/远端)
当前在A主机:
案例1:
把B主机的dir目录远程复制到A主机的/tmp
scp -r root@172.16.30.20:/root/dir /tmp
案例2:
把B主机的file文件远程复制到A主机的/tmp
scp root@172.16.30.20:/root/file /tmp
把A主机的/tmp/file和/tmp/dir目录远程复制到B主机
scp /tmp/file root@172.16.30.20:/tmp
scp -r /tmp/dir root@172.16.30.20:/tmp
2.非对称加密使用ssh命令、sftp命令、scp命令
免密登录:实现172.16.30.10(A)和172.16.30.20(B)之间的相互免密登录
- 在172.16.30.10做以下内容:
ssh-keygen -t rsa ---》生成秘钥对
ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.30.20
- 在172.16.30.20做以下内容:
ssh-keygen -t rsa ---》生成秘钥对
ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.30.10
验证:分别在两台主机上使用ssh命令远程登录另外一台主机,验证是否可以免密登录
注意:免密登录后也是可以使用ssh sftp scp命令