自己由於工作和個人原因要經常使用GitHub和GitLab,GitHub下還有多個賬號,多平臺多賬號來回切換很麻煩,平常使用SSH協議訪問程式碼倉庫比較多,有沒有什麼好辦法來解決來回切換問題,提升工作效率呢?下面來具體分析,找到解決辦法
使用SSH協議來訪問程式碼倉庫
需要經過兩步
- 信任遠端主機(對應於
known_hosts
檔案,類似於Https證書) - 在遠端主機上配置由客戶端生成的公鑰(對應於
id_rsa.pub
檔案)
信任遠端主機
- 上圖的意思是說,無法確認
github.com(13.229.188.59)
主機的真實性,它的的公鑰指紋是nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8
,問問你還要不要繼續連線 - 首先要弄明白
公鑰指紋
是什麼鬼,非對稱加密會生成一個私鑰和一個公鑰,然而公鑰一般比較長(具體取決於公鑰長度位數
),不易用來比對,為了方便和簡化別人來比對,對公鑰進行MD5計算,生成一個相對較短的指紋
,再進行比對,就容易很多 - 那我們怎麼來知道遠端主機的公鑰指紋,然後進行比對呢。拿GitHub來舉慄,可以訪問github-s-ssh-key-fingerprints這個地址得知,發現
公鑰指紋
一致,證明github.com(13.229.188.59)
這個遠端主機真實可信,可以繼續和它進行連線
經過這一步後可以去檢視known_hosts
檔案(MAC環境在~/.ssh
目錄下),可以發現github.com(13.229.188.59)
的公鑰已經寫入到檔案中,主機的真實性現在已經得到了確認,下次就不會再有警告
- 如果仔細看了上面的幾個步驟,並自己實踐了的話,發現我們還是沒有許可權通過
SSH協議
去訪問相應的倉庫。我們已經信任了遠端主機,但是遠端主機還沒有信任我們,換句話說遠端主機還沒有確認我們的身份,是不是平臺的使用者呀?(還不趕緊去註冊一個!)假如現在註冊好了GitHub賬號,加入了組織,但是也沒提示我們輸入使用者名稱和密碼,原來像GitHub和GitLab這樣的程式碼託管平臺使用SSH時預設採用的是公鑰登入
方式
SSH協議公鑰登入
SSH協議其實是支援使用者名稱和密碼登入的,也支援公鑰登入
,GitHub和GitLab預設採用的是公鑰登入
這種方式,何為公鑰登入
?詳細的可以看這篇博文
- 每次輸入使用者名稱和密碼非常不方便,嚴重影響我們的工作效率,尤其每天有個100次提交(誇張手法),輸一百次使用者名稱和密碼要吐
公鑰登入
安全,不會洩露自己的使用者名稱和密碼,只需要把自己本地生成的公鑰給到平臺,就是哥哥你別把私鑰給別人(把你的比特幣加密私鑰給我還是可以的)公鑰登入
方便,一經配置,用到天荒地老 優點講了這麼多,下面來看看怎麼操作吧。大家看這篇文章就可以了(generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent),不多說
多平臺和平臺多賬號配置SSH協議公鑰登入
我們現在已經實現了一個平臺下單個賬號的公鑰登入
,還剩兩個,多平臺
和平臺多賬號
的公鑰登入
配置
多平臺公鑰登入
其實原理很簡單,不同的平臺host地址肯定是不同的,比如github.com,13.229.188.59
和git.coding.net,123.59.82.236
,那麼我們只要為不同的host地址生成各自的公私鑰對,然後在公鑰登入
的時候使用相應的公私鑰對。SSH協議本身也支援這種方式,只需要在~/.ssh
目錄下建立config
檔案,然後配置host對應的公私鑰對檔案
- 為不同host生成公私鑰對
- 為不同的host配置不同的公私鑰對
單平臺多賬號公鑰登入
可以為不同的host配置不同的公私鑰對以實現公鑰登入
,通過上面的配置我們可以發現,SSH協議其實是根據主機地址來路由到不同的公私鑰對檔案的,那如果是相同主機地址多個賬號(單平臺多賬號)該怎麼辦?主要思想還是通過配置不同的主機地址來實現,既然SSH協議是在本地通過config
檔案中配置的資訊來讀取不同的公私鑰對檔案,那麼我們只要為不同的賬號配置不同的主機地址就可以了
訪問遠端倉庫的時候要修改為本地config
檔案中配置的Host
名字