有一天小豬心血來潮,以爲以前的 github 帳號id (pig) 不夠碎,因而註冊了一個新的 github 帳號 (weijiezhu) ,而且按照 github help 的套路完成了ssh的配置。由於同一個 sshkey (id_rsa) 不容許用在兩個帳號當中,因而他生成了一個新的 sshkey (github_rsa)。html
當他寫完代碼以爲本身很碎的時候,git push origin master 卻返回了一個錯誤。react
$ 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.
因而乎他跑了一個測試git
$ ssh -T git@github.com Hi pig! You've successfully authenticated, but GitHub does not provide shell access.
wocao,怎麼仍是pig這個帳號呢。 明明弄了新的sshkey。github
通過一番搗騰,小豬彷彿發現了什麼shell
ssh 使用了默認的 id_rsa 密鑰進行加密,而這個好久之前建立的 sshkey 確實添加到 pig 帳號裏面了。bash
當訪問 github.com 的時候,github 服務會認爲你就是pig這個帳戶。ssh
噢~那好吧。把 pig 帳號裏面的 sshkey 刪掉吧,反正也不用了。而後把 id_rsa.pub 公鑰從新添加到 weijiezhu 這個帳號裏面,順便刪掉添加的 github_rsa.pub 公鑰。ide
$ pbcopy < ~/.ssh/id_rsa.pub
再次提交代碼。Absolutely done!gitlab
注意: 測試
上文和下文進階的用戶名和郵箱要配置好,若是有多個帳號,建議使用局部的。
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進行延伸閱讀噢。
免責防噴: 若是上文描述哪裏有問題,請不吝賜教!