前言
有一天小豬心血來潮,覺得之前的 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進行延伸閱讀噢。
免責防噴: 如果上文描述哪裡有問題,請不吝賜教!