为什么要使用秘钥登录
ssh默认使用密码登录,但是用密码登录存在很多问题,比如密码太复杂不好记、手动输入很麻烦等等。不过最重要的原因还是使用密码登录不够安全,容易被中间人攻击。
密码登录的流程:
客户端
服务器
发起登录请求
1
生成公钥
2
发送生成的公钥
3
使用公钥加密登录密码
4
发送登录密码
5
校验登录密码
6
密码正确:允许登录
密码错误:拒绝登录
返回登录结果
7
客户端
服务器
这个过程是有漏洞的,当客户端向服务端发起请求的时候,攻击人就可能拦截请求,冒充远程主机,然后返给客户端自己伪造的公钥,客户端使用攻击人的公钥进行加密,攻击人拿到密码之后使用自己的私钥解密,就能获取到客户端的密码了。
一、ssh免密登录原理
1.1. 对称加密与非对称加密
对称加密算法 就是发送方和接收方使用同一个秘钥对数据进行加密解密。因为对称加密算法加解密的速度很快,所以适用于传输大量数据的场景。 非对称加密算法 :需要发送方和接收方使用公私钥密钥对进行加密解密,私钥由生成秘钥的一方管理,公钥可以发送给信任请求通信的其他人。发送方使用公钥对内容加密,接收方使用私钥进行解密,这样私钥不会暴露在网络中,安全性大大增加。
SSH连接过程中的两个阶段使用了非对称加密。 一个是在密钥交换阶段,服务器和客户端都生成了自己临时的公钥和私钥,用于计算出同一个用于后续加密通信内容的会话密钥。另外一个就是在用户认证阶段,利用只有匹配的私钥可以唯一解密公钥加密的内容这一特点,通过客户端的公钥私钥对验证客户端的身份。
1.2. 免密登录原理
免密登录的流程:
客户端
服务器
生成公私钥密钥对
ssh-keygen -t rsa
1
公钥 私钥
将公钥拷贝到服务器
scp -p 目录/.ssh/id_rsa.pub root@<ip>:/root/.ssh/authorized_keys
2
公钥
发起登录请求
3
验证客户端身份,
在authorized_keys中匹配到
客户端的公钥,如果存在公钥,
随机生成字符串abcd,
使用公钥加密,得到字符串A
4
发送字符串A给客户端
5
使用私钥对字符串A
进行解密得到字符串abcd
6
发送abcd+SessionKey,通过MD5加密
7
将自己对abcd+SessionKey
加密后的结果与客户端发送
的结果进行比对
8
比对结果相同:允许免密登录
比对结果不同:拒绝免密登录
返回登录结果
9
客户端
服务器
二、ssh免密登录服务器
2.1. 制作秘钥
λ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (C:\Users\13372/.ssh/id_rsa): C:\Users\13372/.ssh/id_rsa1
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in C:\Users\13372/.ssh/id_rsa1.
Your public key has been saved in C:\Users\13372/.ssh/id_rsa1.pub.
The key fingerprint is:
SHA256:TqotKsiVYl0erronHnUIr/WtjKAeit5L2VJi3OQGo4U 13372@DESKTOP-UJ28B9E
The key's randomart image is:
+---[RSA 3072]----+
| |
| . |
| E + . |
| * Bo |
| ..O=*. S |
| o=+Oo.+ |
|+=o+.o... |
|*o*o=o. |
|BB*=o+. |
+----[SHA256]-----+
2.2 上传公钥
scp -p C:\Users\13372/.ssh/id_rsa1.pub root@<ip>:/root/.ssh/authorized_keys
scp -p C:\Users\13372/.ssh/id_rsa1.pub root@<ip>:/root/.ssh/id_rsa.pub
ssh username@ip -p port
cd ~/.ssh
cat id_rsa.pub >> authorized_keys
ssh-copy-id -i C:\Users\13372/.ssh/id_rsa1.pub user@ip
2.3 权限设置
chmod 600 authorized_keys
chmod 700 ~/.ssh
2.4 配置设置
RSAAuthentication yes
PubkeyAuthentication yes
PermitRootLogin yes
PasswordAuthentication no
service sshd restart
三、配置VsCode使用秘钥链接服务器
3.1 安装remote远程连接插件
3.2 配置远程连接
点击配置,选择自己的ssh配置文件 配置参数: Host: 远程登录的服务器ip IdentityFile:私钥(private key)文件 ForwardAgent:支持SSH免密码连接第三方远程服务器
配置好后,在左侧会出现服务器信息 点击服务器右侧的加好,发现已经可以直接登录了
|