可怕,居然可以配置多個git sshkey

WeijieZhu發表於2017-07-14

前言

有一天小豬心血來潮,覺得之前的 github 賬號id (pig) 不夠碎,於是註冊了一個新的 github 賬號 (weijiezhu) ,並且按照 github help 的套路完成了ssh的配置。因為同一個 sshkey (id_rsa) 不允許用在兩個賬號當中,於是他生成了一個新的 sshkey (github_rsa)。

當他寫完程式碼覺得自己很碎的時候,git push origin master 卻返回了一個錯誤。

$ git push origin master
ERROR: Permission to weijiezhu/react-scaffold.git denied to pig.
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

於是乎他跑了一個測試

$ ssh -T git@github.com
Hi pig! You`ve successfully authenticated, but GitHub does not provide shell access.

wocao,怎麼還是pig這個賬號呢。 明明弄了新的sshkey。

經過一番搗騰,小豬彷彿發現了什麼

ssh 使用了預設的 id_rsa 金鑰進行加密,而這個很久以前建立的 sshkey 確實新增到 pig 賬號裡面了。

當訪問 github.com 的時候,github 服務會認為你就是pig這個賬戶。

噢~那好吧。把 pig 賬號裡面的 sshkey 刪掉吧,反正也不用了。然後把 id_rsa.pub 公鑰重新新增到 weijiezhu 這個賬號裡面,順便刪掉新增的 github_rsa.pub 公鑰。

$ pbcopy < ~/.ssh/id_rsa.pub

再次提交程式碼。Absolutely done!

注意:

上文和下文進階的使用者名稱和郵箱要配置好,如果有多個賬號,建議使用區域性的。

git config user.name "使用者名稱"  //在config後加上--global即全域性
git config user.email "郵箱"

進階

然而事情並沒有到此結束,裝完逼還想跑那是不行的。小豬日後發現自己是一個念舊的人。他想要同時使用兩個github。

那好吧,What a big deal~

這個時候我們需要先找到 ~/.ssh/config 檔案,然後往裡面新增如下配置

Host pig.github.com
        HostName github.com
        IdentityFile ~/.ssh/github_rsa

我們指定 pig.github.com 這個”作用域”下的ssh連線統一指向 github.com ,並且使用之前生成好的 github_rsa 這個金鑰加密。

那麼預設的就是使用 ~/.ssh/id_rsa 這個金鑰加密咯。 並且HostName與“作用域”相同。這個就不需要我們管了。

這個時候我們測試一下唄。

$ ssh -T git@pig.github.com
Hi pig! You`ve successfully authenticated, but GitHub does not provide shell access.

$ ssh -T git@github.com
Hi weijiezhu! You`ve successfully authenticated, but GitHub does not provide shell access.

: ) , orz , 這時候還差最後一步

就是修改一下我們在 pig 克隆下來的專案的 remote “作用域” 。

$ git remote rm origin
$ git remote add origin git@pig.github.com:pig/tinynote.git // 注意是 pig.github.com 噢?, 把這個理解為一個“作用域”吧。
$ git push origin master
Everything up-to-date 

同樣的,對於使用不同的git服務商,如(coding.net,gitlab等),可以“東施效顰”地使用上文的進階方案來解決本地多個git賬號的問題。

這個時候小豬的隊友驚呼 ,Jesus Christ, u save my ass ! orz.

對於ssh無密碼登入原理,或者.ssh/config配置不熟悉的可以自行google進行延伸閱讀噢。

免責防噴: 如果上文描述哪裡有問題,請不吝賜教!

相關文章