VScode设置免密登录
VScode中通过Remote Development插件实现了远程开发功能,但是每次连接服务器每次都需要输入密码,比较繁琐,在实验室换了新设备,在新主机上安装好VScode又要重新设置一下,所以去了解了一下SSH协议
SSH安全协议
参考链接:https://www.cnblogs.com/olio1993/p/10960306.html
根据VScode官网上的简介我们可以知道,远程开发是基于SSH安全协议进行的,平时通过Xshell等工具连接服务器时也没深入了解,根据自己查阅的资料,将自己的理解记录如下:
- ssh全称Source Shell,是一种建立在应用层上的远程管理协议标准,也被称为安全外壳协议,主要用于远程会话和其他网络服务提供安全性的协议。其本质是进行加密的shell,代替通过明文传输的Telent协议,具有更高的安全性
- 利用ssh可以有效防止远程管理过程中的信息泄露问题,并能够防止DNS欺骗和IP欺骗
- 提高传输效率,传输过程中对数据进行压缩
- ssh安全协议中结合了两种加密方式:对称加密和非对称加密
对称加密和非对称加密
对称加密方式,数据加密和解密使用同一个密钥,用于解密的密钥一旦丢失造成安全问题
非对成加密方式,完成加解密操作,需要两个密钥同时参与,一般地,”公钥加密,则用私钥解密“,”私钥加密,则用公钥加密“,相对于对称加密,非对称加密的安全性提升了很多,同时效率源源低于对称加密
典型的非对称加密RSA
参考链接:https://www.cnblogs.com/Alenliu/p/5040062.html
1、消息发送方A在本地构建密钥对,公钥和私钥
2、消息发送方A将产生的公钥发送消息给消息接收方B
3、B向A发送数据时,通过公钥进行加密,A收到数据后通过私钥进行解密
4、A向B发送数据时,通过私钥仅对数据进行加密,B接收到数据后通过公钥进行解密
存在的隐患:A发送的公钥是用的明文的方式,如果公钥在数据传输过程中泄露,A通过私钥加密的数据可能被解密。
更安全的模型:消息发送方和消息接收方都各构建一套密钥对,并分别将各自的公钥以明文的方式发送给对方,在传递消息时,A通过B的公钥对数据加密,B接收消息方式通过自己的私钥解密,反过来,B通过A的公钥对数据加密,A接收消息通过自己的私钥进行解密
上图来自:https://www.cnblogs.com/spfrank/p/14393079.html
进一步的提升:这种方式仍然存在数据传递被模拟的隐患,我们可以通过数字签名技术仅从进一步提升,但相应地,效率会大大降低
SSH加密原理
ssh协议结合了RSA非对称加密算法和对称加密算法,只在建立安全通道前使用非对称加密,而后使用对称加密算法使用一个密钥用于加密解密,从而提高了传输的效率。
流程说明:
- 首先服务端通过非对称加密算法,产生一个公钥和私钥
- 当客户端请求连接服务端的端口,服务端将公钥以明文的形式发送给客户端
- 客户端获得公钥后,产生一个密钥口令(256随机数字组成)并用公钥加密发给服务端
- 服务端用私钥进行解密,获取到客户端的密钥口令
- 在这以后,客户端和服务端的信息传递都使用这个密钥口令进行对称加密
分析:
这样的设计虽然和客户端服务端都构建一套密钥对的加密方式来说,在安全性上有所下降,因为上面所述通过客户端口令进行加密过程中,口令可能会被破解,数据被窃听,但是考虑到该口令是由256个随机数字组成,有10^256种组合方式,破解难度比较大,所以相对来说该设计在提高传输效率过程中相对还是比较安全。
设置SSH免密登录
- 在本地主机生成公钥和私钥对
ssh-keygen
上图中箭头所指的密钥锁码可以留空,实现无密码登录。
- 在git中使用如下命令,将公钥添加到远程服务器中
ssh-copy-id -i ~/.ssh/id_rsa.pub -p port userName@IP
其中port是端口号,如果使用的默认端口22则无需设置,userName是用户名,IP是远程主机的IP号
- 重新打开VSCode,远程连接服务器不用输入密码