論git中使用https和ssh協議的區別

論git中使用https和ssh協議的區別

SHELDON CUI'S BLOG 

2017-09-08 

  githttpsssh心得

http好還是ssh好?

git可以使用四種主要的協議來傳輸資料: 本地協議(Local),HTTP 協議,SSH(Secure Shell)協議及 git 協議。其中,本地協議由於目前大都是進行遠程開發和共享代碼所以一般不常用,而git協議由於缺乏授權機制且較難架設所以也不常用。

最常用的便是SSH和HTTP(S)協議。git關聯遠程倉庫可以使用http協議或者ssh協議。

HTTPS優缺點

  • 優點1: 相比 SSH 協議,可以使用用戶名/密碼授權是一個很大的優勢,這樣用戶就不必須在使用 Git 之前先在本地生成 SSH 密鑰對再把公鑰上傳到服務器。 對非資深的使用者,或者系統上缺少 SSH 相關程序的使用者,HTTP 協議的可用性是主要的優勢。 與 SSH 協議類似,HTTP 協議也非常快和高效

  • 優點2: 企業防火牆一般會打開 80 和 443 這兩個常見的http和https協議的端口,使用http和https的協議在架設了防火牆的企業裏面就可以繞過安全限制正常使用git,非常方便

  • 缺點: 使用http/https除了速度慢以外,還有個最大的麻煩是每次推送都必須輸入口令. 但是現在操作系統或者其他git工具都提供了 keychain 的功能,可以把你的賬戶密碼記錄在系統裏,例如OSX 的 Keychain 或者 Windows 的憑證管理器。

SSH的優缺點

  • 優點1: 架設 Git 服務器時常用 SSH 協議作爲傳輸協議。 因爲大多數環境下已經支持通過 SSH 訪問 —— 即時沒有也比較很容易架設。 SSH 協議也是一個驗證授權的網絡協議;並且,因爲其普遍性,架設和使用都很容易。
  • 缺點1: SSH服務端一般使用22端口,企業防火牆可能沒有打開這個端口。

  • 缺點2: SSH 協議的缺點在於你不能通過他實現匿名訪問。 即便只要讀取數據,使用者也要有通過 SSH 訪問你的主機的權限,這使得 SSH 協議不利於開源的項目。 如果你只在公司網絡使用,SSH 協議可能是你唯一要用到的協議。 如果你要同時提供匿名只讀訪問和 SSH 協議,那麼你除了爲自己推送架設 SSH 服務以外,還得架設一個可以讓其他人訪問的服務。

總結

HTTPS利於匿名訪問,適合開源項目可以方便被別人克隆和讀取(但他沒有push權限);畢竟爲了克隆別人一個倉庫學習一下你就要生成個ssh-key折騰一番還是比較麻煩,所以github除了支持ssh協議必然提供了https協議的支持。

而SSH協議使用公鑰認證比較適合內部項目。 當然了現在的代碼管理平臺例如github、gitliab,兩種協議都是支持的,基本上看自己喜好和需求來選擇就可以了。

簡單理解ssh協議

ssh的協議理解起來比https簡單多了,大家可以參考阮一峯老師的這篇文章SSH原理與運用 和 我的這篇文章ssh建立通道和認證原理

總結來看,就是SSH協議使用目前已經比較成熟的RSA這類非對稱加密技術來實現了安全祕鑰的協商: 目標主機把自己的公鑰發送給客戶端,客戶端用公鑰加密 一些東西 之後傳給服務器,服務器用RSA私鑰從中解出 一些東西,保證了 一些東西 防篡改、防泄密,最終協商出只有雙方纔知道的通信密鑰。

github上使用ssh協議

如果要使用ssh協議來克隆或者push github上的代碼,則git程序會採用ssh的校驗機制。而由於github上所有倉庫都是採用共用git賬號體系的方式, 是無法用git用戶登錄github服務器的。各個用戶只能通過公鑰認證的方式使用此SSH賬號訪問版本庫。 因此,你在執行 git clone命令之前,必須確保已經把ssh公鑰放置到了github服務器上。

生成公鑰可以看這裏: github官方公鑰配置教程

RSA公鑰生成後,可以用mac上的拷貝命令,把公鑰拷貝到剪切板:


 

# Copies the contents of the id_rsa.pub file to your clipboard

# pbcopy < ~/.ssh/id_rsa.pub

 

然後,去github上把這個公鑰拷貝到網站的個人配置中(相當於在github服務器的~/.ssh/authorized_keys ),接下來就能愉快的進行克隆。

如果遠程主機是自己可以控制的機器,也可以這樣:


 

ssh-copy-id user@host

scp -P 22 id_rsa.pub [email protected]:/root/.ssh/authorized_keys

或追加

cat ~/.ssh/id_dsa.pub|ssh -p 22 [email protected] `cat - >> ~/.ssh/authorized_keys`

注意一點: 當你把公鑰設置到github上時,你會在UI界面上看到一個 fingerprint 的指紋,這個指紋其實就是你的公鑰的指紋。你可以對比這個指紋是否跟你本機的公鑰指紋相同,儘量把github上不熟悉的公鑰都刪掉

公鑰指紋可以參考這篇文章:ssh建立通道的過程和認證原理

HTTPS協議如何保存憑證信息

HTTPS認證方式雖然需要輸入賬戶密碼,但現在也不需要每次都輸入。這個憑據保存需要依賴一個憑據管理器,每個操作系統平臺都有自己的憑據管理器。可以參考github官方提供的教程來配置

我這裏介紹一個git的憑據管理方式:


 

# 建立憑據文件

$ touch ~/.git-credentials

$ vim ~/.git-credentials

在文件中加入帶憑據的url信息:


 

https://{username}:{passwd}@github.com

然後告訴git使用這個憑據管理器:


 

$ git config --global credential.helper store

上面命令會在git配置文件 ~/.gitconfig 中設置上一個憑據地址:


 

[credential]

helper = store

refer

git之ssh和https密碼配置

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章