git多帳號登陸問題

做者:白狼 出處:http://www.manks.top/git-multiply-accounts.html 本文版權歸做者,歡迎轉載,但未經做者贊成必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接,不然保留追究法律責任的權利。html

什麼意思呢?想問的人天然知道,不懂的人說了他也是不知道滴。git

同一服務器,同一託管平臺,多個帳號問題bash

一、添加key服務器

咱們暫且以oschina爲例。爲了更好的說明問題,咱們在oschina平臺分別用帳號111新建項目test111和帳號222新建項目test222,記得項目私有化哦,否則咱們也沒啥說的了。ssh

在咱們想要把項目test111 clone下來以前,須要先按照下面的步驟設置關聯的keygitlab

ssh-keygen -t rsa -C "111@163.com" // 郵箱是帳號111對應的郵箱

整個過程就回車完事,操做起來那是至關的簡單!可是還沒完,可能你注意到了,回車的過程當中,有一句話是這樣提示的:測試

Your public key has been saved in /root/.ssh/id_rsa.pub.

沒錯,咱們如今打開這個文件.net

cat /root/.ssh/id_rsa.pub

拷貝文件裏面的內容, 而後打開 http://git.oschina.net/keys 這個頁面,新建key,把複製的內容粘貼進來就行了。code

這樣一來,咱們就把服務器上面的key跟oschina平臺進行了關聯。htm

二、clone項目

接着咱們經過git clone命令把test111項目clone下來,記得clone的地址是ssh而不是https哦,這個時候會提示咱們輸入用戶名和密碼,其分別是oschina的帳號和密碼。

若是你手賤是以https的方式進行clone的,能夠經過下面的命令從新設置遠程倉庫地址(沒有則可跳過此步驟)

// 移除以前的遠程倉庫地址
git remote remove origin
// 新增遠程倉庫地址爲ssh,非https
git remote add origin git@git.oschina.net:wwolf/test111.git

三、多帳號兼容問題

到這裏,對於test111項目pull push操做基本上都是沒有問題的了。若是說用戶222想在這臺服務器上面對項目test222進行管理,咱們直接執行git clone git@git.oschina.net:222/test222.git以後,報錯了,提示以下:

Access denied.
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.

爲何呢?首先最重要的問題確定是key的問題了!由於咱們以前並未層在這臺服務器增長key關聯到用戶222的oschina帳號!那咱們就按照步驟1從新在服務器上爲用戶222添加一個key吧,不過須要注意的是,咱們的key保存的文件要重命名了,否則可就把用戶111建立的key覆蓋了!

ssh-keygen -t rsa -C "帳號222的郵箱@qq.com"
//接下來會提示咱們想要把key保存在哪一個文件,從新輸入文件名便可
Enter file in which to save the key (/root/.ssh/id_rsa): /root/.ssh/id_rsa_2
//接着回車回車回車完事,重要的話說三遍!

而後咱們登陸帳號222的oschina帳號添加key 可是問題出現了,這個時候咱們從新clone test222依舊提示咱們沒權限,怎麼回事???本篇文章的中心主題曝光了!廢話了一堆,開始說重點--------------------------

其實這個時候咱們clone test222項目時,git是拿默認的id_rsa.pub文件裏面的key去對比的,這確定是有問題的嘛,由於222帳號並無添加這個key!那也就是說咱們這裏若是clone test222的時候讓git拿着id_rsa_2.pub文件裏面的key去驗證不就完事了麼?是的,就是這樣!咱們看實現步驟:

首先咱們讓git識別咱們新增的key

ssh-agent bash
ssh-add ~/.ssh/id_rsa_2

接着咱們在~/.ssh/ 目錄下新建或者修改config文件

#Host 是你遠程倉庫的地址,注意哦,若是有些服務器作的ip端口轉發,這裏不要帶上端口號
Host git.oschina.net
#HostName 是遠程倉庫的地址,一樣若是作的端口轉發也不該帶端口號
HostName git.oschina.net
#Port 端口號,若是有作轉發須要在這裏填寫端口號,沒有就沒必要要填
#Port 8800
#用戶
User 111
#識別key的文件
IdentityFile ~/.ssh/id_rsa

#都指向同一個平臺的話,下面的Host須要作個處理,由於咱們在用這個key的時候根據Host從上到下進行查找,不作修改確定會先查找到第一個key,依舊無效,隨便改就行了,其餘參數不作特殊處理
Host git222.oschina.net
HostName git.oschina.net
#Port 8800
User 222
IdentityFile ~/.ssh/id_rsa_2

能夠看到,咱們對222用戶的Host作了處理,那麼咱們就須要修改下222的遠程倉庫地址了

// 原倉庫地址
git@git.oschina.net:222/test222.git
// 修改成
git@git222.oschina.net:222/test222.git

也就是說這個時候用戶222只須要執行命令

git clone git@git222.oschina.net:222/test222.git

就能夠了!就能夠了!!!

cd test222/
//發現git pull git push也都沒有任何問題

同一服務器,不一樣託管平臺,多個帳號問題

這多個平臺的問題基本上就簡單了,爲了舉例說明,咱們用gitlab平臺的333帳號的項目test333進行測試,注意哦,咱們是註冊第三個帳號在上面兩個帳號的基礎之上進行的測試

git clone git@gitlab.com:333/test333.git
// 可想而知,一樣是沒權
由於沒那麼多郵箱,咱們註冊gitlab依舊使用的是用戶222的郵箱,不過這對咱們的操做沒任何影響,無非就是多建立一個id_rsa_3文件而已,鑑於此,咱們直接拷貝id_rsa_2.pub裏面的key到gitlab平臺。

而後在~/.ssh/config文件內添加gitlab平臺的配置便可

Host gitlab.com
HostName gitlab.com
#Port 8800
User 333
//由於gitlab的郵箱跟用戶222一致,這裏用這個key,若是不一致,你仍然須要生成新的key,這裏引用新的key文件
IdentityFile ~/.ssh/id_rsa_2

回過頭來看看,git多帳號的問題不難操做嘛,完美解決! 查看原文

相關文章
相關標籤/搜索