Bitbucket上使用SSH協作


【說明】此文因樣式原因,圖片顯示不全,點擊圖片可查看完整圖片

【場景】在bitbucket上,firstbit擁有版本倉庫(名為:prisshop);為方便開發,他邀請了jscon共同維護這個倉庫,可又不想讓jscon使用Fork方式,而是像這個倉庫的管理員那樣自由操作這個版本庫。

     換言之,這個版本倉庫的擁有者是firstbit,管理者是firstbit與jscon。

>>操作<<

     Fork方式是針對普遍的協作,如果你就是團隊中的人員,上面的方式無疑會拖項目的后腿。這就需要使用倉庫共享模式,讓項目擁有者把你加入團隊成員,這樣你就能直接把修改的內容push到項目中了。

     為了方便以后的使用,應當使用SSH方式,這樣既可以不輸入密碼,也可以辨認提交的用戶名。

Bitbucket文檔里提供了一個非常詳盡的的教程:Set up SSH for Git。現翻譯如下:

(以下步驟同時適用於用戶firstbitjscon

 

1、生成公鑰與私密

     首先就是你的電腦上創建一個ssh key。
     關於SSH原理可參看阮一峰的博文《SSH原理與運用》,講的非常詳盡,推薦:

使用密碼登錄,每次都必須輸入密碼,非常麻煩。好在SSH還提供了公鑰登錄,可以省去輸入密碼的步驟。所謂"公鑰登錄",原理很簡單,就是用戶將自己的公鑰儲存在遠程主機上。登錄的時候,遠程主機會向用戶發送一段隨機字符串,用戶用自己的私鑰加密后,再發回來。遠程主機用事先儲存的公鑰進行解密,如果成功,就證明用戶是可信的,直接允許登錄shell,不再要求密碼。這種方法要求用戶必須提供自己的公鑰。如果沒有現成的,可以直接用ssh-keygen生成一個

     我們打開Git Bash,然后輸入:

ssh-keygen

 提示讓你輸入密鑰的地址與名字,默認是 ~/.ssh/id_rsa,這里我們使用 ~/.ssh/bitbucket_id_rsa,一路回車得到兩個文件(期間會讓你輸入passphass用來加密私鑰,這里為簡單起見就為空,所以直接回車):

黃底標記的文件是自動生成的密鑰,config文件需要自己創建 黃底標記的文件是自動生成的密鑰,config文件需要自己創建

 

2、創建config文件

     如上圖所示,在創建一個config文件(沒有后綴名),在里面輸入:

Host bitbucket.org
 IdentityFile ~/.ssh/bitbucket_id_rsa

注意第二行是有縮進(也可以是一個空格)是非常重要的,不要省略。里面的“~/.ssh/bitbucket_id_rsa”就是剛才生成的私鑰路徑。

 

3、更新.bashrc文件

     SSH認證前提是開啟認證代理,這個代理的信息可通過以下命令查看:

$ eval 'ssh-agent'
SSH_AUTH_SOCK=/tmp/ssh-GDRrxm2136/agent.2136; export SSH_AUTH_SOCK;
SSH_AGENT_PID=5492; export SSH_AGENT_PID;
echo Agent pid 5492;

 每次開啟Git Bash窗口前需要開啟這個代理,顯得有些麻煩——一個有效的解決方法就是當啟動Shell時啟動開啟這個代理,這就用到吧.bashrc文件。
     這個文件可以從 a post by Joseph M. Reagle Jr. from MIT 里Copy來,內容如下:

SSH_ENV=$HOME/.ssh/environment

function start_agent {
     echo "Initialising new SSH agent..."
     /usr/bin/ssh-agent | sed 's/^echo/#echo/' > ${SSH_ENV}
     echo succeeded
     chmod 600 ${SSH_ENV}
     . ${SSH_ENV} > /dev/null
     /usr/bin/ssh-add;
}

# Source SSH settings, if applicable

if [ -f "${SSH_ENV}" ]; then
     . ${SSH_ENV} > /dev/null
     #ps ${SSH_AGENT_PID} doesn't work under cywgin
     ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
         start_agent;
     }
else
     start_agent;
fi

 將上面的內容直接保存到 ~/.bashrc文件中即可。
注意:這個文件一定要保存到home路徑下,可以在shell 中輸入:

touch ~/.bashrc

 創建之后,再用其他編輯器(比如Notepad++等)打開把上面的內容拷貝進去即可。
     重啟Git Bash!
     然后提示輸入passphase(只有第一次啟動輸入,之后的不會再輸入了)后,驗證在代理里注冊成功:

$ ssh-add -l
2048 0f:37:21:af:1b:31:d5:cd:65:58:b2:68:4a:ba:a2:46 /Users/manthony/.ssh/id_rsa (RSA)

由於默認是添加id_rsa的,而我們自己創建了一個bitbucket_id_rsa,所以得手動添加:

ssh-add  bitbucket_id_rsa

 

4、在Bitbucket賬號中添加公鑰

1) 在Git Bash中使用cat命令獲得公鑰信息:

cat ~/.ssh/bitbucket_id_rsa.pub

 將獲得的代碼復制下來,供后面使用:

獲取公鑰信息獲取公鑰信息

2) 打開瀏覽器,進入主頁的賬號管理(Manage Account):

賬號管理 賬號管理

3) 點擊SSH Keys選項卡,粘貼入剛才復制的公鑰即可:

粘入公鑰 粘入公鑰

4) 回到命令行,輸入下面命令確認能與Bitbucket網站SSH通信:

ssh -T git@bitbucket.org

 如果出現下面的信息:
conq: logged in as jscon.
You can use git or hg to connect to Bitbucket. Shell access is disabled.

則說明你已經能用這個key與bitbucket網站SSH通信了。

 

5、更新遠程服務器

     之前使用https跟遠程服務器通信,現在更新成ssh方式通信即可。Git工作原理還是一致的,只是格式上有所區別,主要體現在賬號出現的位置上:

SSH與HTTPS格式上的區別 SSH與HTTPS格式上的區別

比如clone

git clone git@bitbucket.org:firstbit/prisshop.git

使用SSH方式clone版本庫 使用SSH方式clone版本庫

比如push
先注冊遠程SSH服務器:

git remote add bitbucket git@bitbucket.org:firstbit/prisshop.git

再push即可:

git push bitbucket

 

6、邀請入伙

     firstbit與jscon兩個人現在都按上面的五步分別在自己的機器上完成跟自己bitbucket賬號的SSH通信的配置后,之后一起協作就非常簡單了。
1) 首先,firstbit發起邀請。firstbit到版本庫首頁點擊發送請求按鈕,邀請jscon:

點擊發送邀請按鈕 點擊發送邀請按鈕

 

輸入用戶名jscon后,按share按鈕即可

輸入用戶名jscon后,按share按鈕即可

同時在倉庫管理面板中定義jscon對該版本庫的使用權限:

給JSCON用戶定義管理(讀、寫、管理)權限 給JSCON用戶定義管理(讀、寫、管理)權限

2) jscon登錄自己的首頁,系統提示Inbox(收件箱)收到firstbit的邀請信:

jscon收到的要邀請信 jscon收到的要邀請信

現在jscon就可以在自己的機器上管理prisshop版本倉庫了(就像自己創建的版本倉庫那樣,唯一的區別是該版本的所有權歸firstbit)。

【后記】好久沒有在cnblogs上面寫博客了,因為去年整了一個wordpress(http://www.janscon.com),基本在上面發的。

另外有微博 http://weibo.com/boychenney 歡迎關注。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM