為多個平臺或平臺下多個賬號設定SSH協議訪問

冰冰棒冰冰發表於2018-03-24

自己由於工作和個人原因要經常使用GitHub和GitLab,GitHub下還有多個賬號,多平臺多賬號來回切換很麻煩,平常使用SSH協議訪問程式碼倉庫比較多,有沒有什麼好辦法來解決來回切換問題,提升工作效率呢?下面來具體分析,找到解決辦法

使用SSH協議來訪問程式碼倉庫

需要經過兩步

  • 信任遠端主機(對應於known_hosts檔案,類似於Https證書)
  • 在遠端主機上配置由客戶端生成的公鑰(對應於id_rsa.pub檔案)

信任遠端主機

為多個平臺或平臺下多個賬號設定SSH協議訪問

  • 上圖的意思是說,無法確認github.com(13.229.188.59)主機的真實性,它的的公鑰指紋是nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8,問問你還要不要繼續連線
  • 首先要弄明白公鑰指紋是什麼鬼,非對稱加密會生成一個私鑰和一個公鑰,然而公鑰一般比較長(具體取決於公鑰長度位數),不易用來比對,為了方便和簡化別人來比對,對公鑰進行MD5計算,生成一個相對較短的指紋,再進行比對,就容易很多
  • 那我們怎麼來知道遠端主機的公鑰指紋,然後進行比對呢。拿GitHub來舉慄,可以訪問github-s-ssh-key-fingerprints這個地址得知,發現公鑰指紋一致,證明github.com(13.229.188.59)這個遠端主機真實可信,可以繼續和它進行連線

為多個平臺或平臺下多個賬號設定SSH協議訪問

經過這一步後可以去檢視known_hosts檔案(MAC環境在~/.ssh目錄下),可以發現github.com(13.229.188.59)的公鑰已經寫入到檔案中,主機的真實性現在已經得到了確認,下次就不會再有警告

為多個平臺或平臺下多個賬號設定SSH協議訪問

  • 如果仔細看了上面的幾個步驟,並自己實踐了的話,發現我們還是沒有許可權通過SSH協議去訪問相應的倉庫。我們已經信任了遠端主機,但是遠端主機還沒有信任我們,換句話說遠端主機還沒有確認我們的身份,是不是平臺的使用者呀?(還不趕緊去註冊一個!)假如現在註冊好了GitHub賬號,加入了組織,但是也沒提示我們輸入使用者名稱和密碼,原來像GitHub和GitLab這樣的程式碼託管平臺使用SSH時預設採用的是公鑰登入方式

SSH協議公鑰登入

SSH協議其實是支援使用者名稱和密碼登入的,也支援公鑰登入,GitHub和GitLab預設採用的是公鑰登入這種方式,何為公鑰登入?詳細的可以看這篇博文

  • 每次輸入使用者名稱和密碼非常不方便,嚴重影響我們的工作效率,尤其每天有個100次提交(誇張手法),輸一百次使用者名稱和密碼要吐
  • 公鑰登入安全,不會洩露自己的使用者名稱和密碼,只需要把自己本地生成的公鑰給到平臺,就是哥哥你別把私鑰給別人(把你的比特幣加密私鑰給我還是可以的)
  • 公鑰登入方便,一經配置,用到天荒地老 優點講了這麼多,下面來看看怎麼操作吧。大家看這篇文章就可以了(generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent),不多說

為多個平臺或平臺下多個賬號設定SSH協議訪問

多平臺和平臺多賬號配置SSH協議公鑰登入

我們現在已經實現了一個平臺下單個賬號的公鑰登入,還剩兩個,多平臺平臺多賬號公鑰登入配置

多平臺公鑰登入

其實原理很簡單,不同的平臺host地址肯定是不同的,比如github.com,13.229.188.59git.coding.net,123.59.82.236,那麼我們只要為不同的host地址生成各自的公私鑰對,然後在公鑰登入的時候使用相應的公私鑰對。SSH協議本身也支援這種方式,只需要在~/.ssh目錄下建立config檔案,然後配置host對應的公私鑰對檔案

  • 為不同host生成公私鑰對

為多個平臺或平臺下多個賬號設定SSH協議訪問

  • 為不同的host配置不同的公私鑰對

為多個平臺或平臺下多個賬號設定SSH協議訪問

單平臺多賬號公鑰登入

可以為不同的host配置不同的公私鑰對以實現公鑰登入,通過上面的配置我們可以發現,SSH協議其實是根據主機地址來路由到不同的公私鑰對檔案的,那如果是相同主機地址多個賬號(單平臺多賬號)該怎麼辦?主要思想還是通過配置不同的主機地址來實現,既然SSH協議是在本地通過config檔案中配置的資訊來讀取不同的公私鑰對檔案,那麼我們只要為不同的賬號配置不同的主機地址就可以了

為多個平臺或平臺下多個賬號設定SSH協議訪問

訪問遠端倉庫的時候要修改為本地config檔案中配置的Host名字

為多個平臺或平臺下多個賬號設定SSH協議訪問

相關文章