乐趣区

git-clone的两种方式以及浅谈加密一

一. 引言

今天使用 git clone 的时候由于没有配置 ssh 但是使用了 ssh 的 clone 命令,出了点问题。仔细研究了一下,还是挺有意思点,希望通过阅读下面的内容能给大家带来一些收获。

二. git clone 的两种方式.

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

1. ssh

在 clone 的时候可以选择 SSH,首先在命令行输入 ssh-keygen -t rsa -b 40996 -C“邮箱”,一路点击确定,在本地生成.ssh 文件,里面有 id_rsa(私钥) id_rsa.pub(公钥),将公钥上传到 github 上就可以直接免密与 github 进行文件传输了

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

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

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

3.git clone git@xxxxxxxxxx`

2. HTTP

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

3. ssh 与 HTTP 方式的比较

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

三. 加密

上面介绍了 git clone 的两种方式,探讨了一下引入这两种方式的原因,同时引入了加密这个该概念。

在密码学中,加密(英语: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 非对称加密算法

退出移动版