一. 引言
今天使用git clone的时候由于没有配置ssh 但是使用了ssh的clone命令,出了点问题。仔细研究了一下,还是挺有意思的,特意记录下来能给大家带来一些收获。
二. git clone的两种方式.
git clone分为两种方式,一种是通过ssh,还有一种是通过http(s)。
1. ssh
在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)上相应的账号就行了。
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进行文件传输的两种方式出发,介绍了部分加密的概念,希望对大家有所帮助。后面将像大家介绍剩余的加密方面的概念
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。