一. 引言
今天使用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進行文件傳輸的兩種方式出發,介紹了部分加密的概念,希望對大家有所幫助。後面將像大家介紹剩餘的加密方面的概念