2

一. 引言

今天使用git clone的时候由于没有配置ssh 但是使用了ssh的clone命令,出了点问题。仔细研究了一下,还是挺有意思的,特意记录下来能给大家带来一些收获。

二. git clone的两种方式.

git clone分为两种方式,一种是通过ssh,还有一种是通过http(s)。

1. ssh

clipboard.png

在clone的时候可以选择SSH,首先在命令行输入

ssh-keygen -t rsa  -C “email”
//这里 -c是创建别名,一般网站都喜欢用邮箱

一路点击确定,在本地生成.ssh文件,里面有id_rsa(私钥) id_rsa.pub(公钥),将公钥上传到github上就可以直接免密与github进行文件传输了

// 本地存在.ssh文件后
// 终端输入
 $ cd ~/.ssh/
 $ cat id_rsa.pub
 $ ssh-rsa xxxxxxxxxxxxxxxxxxx yourEmail
// 复制上面出现的内容

在gitlab(github)-->个人账户-->setting-->ssh 将刚复制的公钥粘贴
此时就完成了ssh设置,再clone就是免密的啦。

这里要提心一下,这时候clone的格式一定是 git clone git@xxxxxxxxxx

2. HTTP

HTTP的方式比较简单,就是 git clone 给定的url,然后输入自己在gitlab(github)上相应的账号就行了。
clipboard.png

3. ssh与HTTP方式的比较

想要比较他们之间的优缺点,首先要搞清楚为什么会这么设计。
我个人认为,项目一般分为两类,一类是团队(个人)的项目,一类是开源的项目。
团队(个人)项目,具有私有性。同时拉或者推为了方便都应该不需要验证。这就需要保证数据在传输中的私有与可靠。所以使用ssh协议(以非对称加密实现身份验证)。
开源项目,具备公有特性。一方面如果每个参与者的数据的拉取都进行加密解密的话,代价将会非常大。另外一个方面,对于众多提交者,代码应该由管理者去审核是否merge,同时代码也没有必要保持传输过程中的私有可靠。所以可以采用HTTP明文传输或者HTTPS也可以。

三. 加密

在密码学中,加密(英语:Encryption)是将明文信息改变为难以读取的密文内容,使之不可读的过程。只有拥有解密方法的对象,经由解密过程,才能将密文还原为正常可读的内容。

具体在前端中你至少要明白下面几个概念:
公钥、私钥、RSA、数字证书、https与http的关系、TLS与SSL
我将在本篇文章和下篇文章为大家一一道来

1. 对称加密

对称加密很简单,就是明文经过密钥转化成密文,倘若我知道密钥和密文,我也可以推出明文,典型的像是摩尔斯码。所以在谍战片中,我们经常看到特务找密码本,就是因为有了密码本就可以破译密文了。

2. 非对称加密(RSA)

在对称加密中,由于是直接传递的密钥,密钥容易被人窃取导致信息泄漏,

人们认识到,加密和解密可以使用不同的规则,只要这两种规则之间存在某种对应关系即可,这样就避免了直接传递密钥。这种加密方式就叫做非对称加密。

1977年,三位数学家Rivest、Shamir 和 Adleman 设计了一种算法,可以实现非对称加密。这种算法用他们三个人的名字命名,叫做RSA算法。从那时直到现在,RSA算法一直是最广为使用的"非对称加密算法"。毫不夸张地说,只要有计算机网络的地方,就有RSA算法。

在RSA加密算法中,公钥用于对数据进行加密,私钥用于对数据进行解密
在RSA签名算法中,私钥用于对数据进行签名,公钥用于对签名进行验证。

3. ssh

ssh是一个安全协议,以非对称加密实现身份验证。,本机产生id_rsa(私钥) id_rsa.pub(公钥),将公钥上传到github上。pull的时候公钥用于对数据进行加密,私钥用于对数据进行解密,push的时候私钥用于对数据进行签名,公钥用于对签名进行验证。

4. 拓展

这里再介绍一个部署项目的方法,比如我们开发项目,把项目托管到gitlab上,然后当我们部署项目的时候将本地文件上传到服务器上。说实话这一步还是比较麻烦的。我们其实可以让gitlab和我们线上服务器通过ssh连接,当gitlab代码更新到最新版本的时候,服务器上我只需要运行git pull 就可以自动完成文件的拉取、更新以及项目的部署了。

总结

本文从git进行文件传输的两种方式出发,介绍了部分加密的概念,希望对大家有所帮助。后面将像大家介绍剩余的加密方面的概念

参考

加密-维基百科
RSA算法原理(一)
白话解释 对称加密算法 VS 非对称加密算法


Runningfyy
1.3k 声望661 粉丝