SSH远程加密连接
1.定义
- ssh是一套网络协议
- 目的在于保证安全的网络服务以及加密远程登录信息
- Linux ssh命令是实现ssh协议的一个操作,以sshd服务的形式在linux上运行
- 对ssh协议管理的开源软件是主流的openssh工具
2.为什么要使用SSH
以前常用的FTP协议、telnet工具进行远程服务器登录,但这些都是明文传输,账号明码以明文暴露在互联网中。安全性低。
为了保证数据传输时的安全性、加密性,出现了2种主流加密方式:
- 对称加密:使用同一个钥匙进行数据加密、解密
- 非对称加密:公私钥,公钥是锁,私钥才是钥匙
3.对称加密
4.非对称加密
对称加密只有一个秘钥
非对称加密有一对秘钥。公钥和私钥
除非私钥丢失,否则被破解的可能性极低
加解密流程:
- 服务器生成公私钥,公钥加密,私钥解密
- 客户端发送连接请求
- 服务器收到请求,发回公钥
- 客户端收到公钥,发送数据使用公钥加密
- 服务器收到数据,使用私钥解密
5.中间人攻击
对于非对称加密,客户端怎么保证自己收到的公钥来自于目标服务器呢?
也就是说,如果黑客拦截了客户端发送的请求,发回自己伪造的公私钥中的公钥,解密客户端发送的账户密码信息,借以攻击服务器怎么办?
所以一定要保证目标服务器的正确性,方法:
基于口令的服务器验证
[root@admin ~]# ssh root@10.0.0.101 The authenticity of host '10.0.0.101 (10.0.0.101)' can't be established. ECDSA key fingerprint is SHA256:5UTMlsiNBeHUdk1FODU9BAkpt9ysnRrYfTTJG69oCGM. ECDSA key fingerprint is MD5:22:c7:f6:0b:6d:f1:8b:ee:6c:da:5a:10:80:2d:a5:14. Are you sure you want to continue connecting (yes/no)? 这是一段ssh首次连接返回的信息,说的是无法确认目标服务器的真实性,但是已知该主机的指纹信息:5UTMlsiNBeHUdk1FODU9BAkpt9ysnRrYfTTJG69oCGM 接下来需要验证这个指纹信息,是否正确: [root@admin ~]# ssh-keyscan -t ecdsa 10.0.0.101 |ssh-keygen -lf - # 10.0.0.101:22 SSH-2.0-OpenSSH_7.4 256 SHA256:5UTMlsiNBeHUdk1FODU9BAkpt9ysnRrYfTTJG69oCGM 10.0.0.101 (ECDSA) 对比两个指纹信息,看看是否同一台机器。 确认是同一台机器之后,可以输入yes,接着输入密码进行登录了
重要配置文件
放在家目录下的.ssh目录中,如果没有做过秘钥生成,是这个状态:
[root@service ~]# cd ~/.ssh/ [root@service .ssh]# ls known_hosts
如果生成过秘钥,是这个状态:
[root@admin ~]# cd ~/.ssh/ [root@admin .ssh]# ls authorized_keys id_rsa id_rsa.pub known_hosts
当客户端收到服务器的公钥信息,就会存放在known_hosts文件中。
服务器会将客户端的公钥信息存放在authorized_keys中
id_rsa是私钥信息
id_rsa.pub是公钥信息
6.登录Linux服务器的方式
1.基于口令(账户密码)登录:
- 需要记住复杂密码
- 如果机器太多,难以管理
2.基于公钥认证登录
- 免密登录,减少运维负担
流程:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ReXOnR8B-1662827754098)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220831163654928.png)]
公钥登录文字流程:
(1) 客户端发送自己的公钥给服务器,写入到服务器authorized_keys中;
(2) 服务器收到客户端连接请求后,在自己的authorized_keys中进行匹配,如果存在该客户端的公钥,就生成一个随机数值R,再利用客户端的公钥对R进行加密,等到一个加密后的公钥(R),发往客户端;
(3)客户端收到后,利用自己的私钥解密,得到随机数R,再结合随机数R与当前连接会话的key,采用MD5加密方式,生成摘要Digest1,发往服务器验证;
(4)服务器采用相同算法,使用MD5加密R和会话key,得到Digest2;
(5)服务器对比Digest1和Digest2是否一致,一致则验证通过,客户端登录服务器。
7.免密登录实战
客户端本地生成一对公私钥
ssh-keygen -t rsa -P ‘’
[root@client .ssh]# ssh-keygen -t rsa -P '' Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa