當(dāng)公司的項(xiàng)目業(yè)務(wù)逐漸增多時(shí),我們就會(huì)考慮到對(duì)項(xiàng)目進(jìn)行組
件化開發(fā),一般情況都是把組件放在公司的Gitlab 上,這意味
著您可以在本地工作,但您也可以將更改共享或“推送”到其他服
務(wù)器。在將更改推送到GitLab服務(wù)器之前,您需要一個(gè)安全的
通信通道來共享信息。SSH協(xié)議提供此安全性,允許您在不提
供用戶名或密碼的情況下對(duì)GitLab遠(yuǎn)程服務(wù)器進(jìn)行身份驗(yàn)證。
找到現(xiàn)有的SSH密鑰對(duì)
在生成新的SSH密鑰對(duì)之前,通過打開shell或Windows 上的
命令提示符并運(yùn)行以下命令,檢查您的系統(tǒng)是否已在默認(rèn)位
置具有一個(gè)密鑰對(duì):
Windows命令提示符:
type %userprofile%\.ssh\id_rsa.pub
Windows / GNU / Linux / macOS / PowerShell上GitBash:
cat ~/.ssh/id_rsa.pub
如果您看到以ssh-rsa您開頭的字符串已經(jīng)有SSH密鑰對(duì),您
可以跳過下一部分的生成部分并跳到復(fù)制到剪貼板步驟。如
果您沒有看到該字符串或想要生成具有自定義名稱的SSH密
鑰對(duì),請(qǐng)繼續(xù)執(zhí)行下一步。
請(qǐng)注意,公共SSH密鑰也可以如下命名:
id_dsa.pub
id_ecdsa.pub
id_ed25519.pub
生成新的SSH密鑰對(duì)
1. 要生成新的SSH密鑰對(duì),請(qǐng)使用以下命令:
Windows / GNU / Linux / macOS上的Git Bash:
ssh-keygen -t rsa -C "your.email@example.com" -b 4096
注意:生成密鑰時(shí)需要你設(shè)置密碼,請(qǐng)記住設(shè)置的密碼
視窗:
或者在Windows上,您可以下載PuttyGen 并按照此文檔文章
生成SSH密鑰對(duì)。
2.接下來,系統(tǒng)將提示您輸入文件路徑以保存SSH密鑰對(duì)。如
果您還沒有SSH密鑰對(duì),請(qǐng)按Enter鍵使用建議的路徑。使用建
議的路徑通常允許SSH客戶端自動(dòng)使用SSH密鑰對(duì)而無需其他
配置。
如果你已經(jīng)有了一個(gè)SSH密鑰對(duì)建議的文件路徑,則需要輸入
一個(gè)新的文件路徑,并聲明此SSH密鑰對(duì)將在您使用什么主
機(jī).ssh/config文件,請(qǐng)參閱使用非默認(rèn)的SSH密鑰對(duì)路徑工作
的更多信息。
3.輸入文件路徑后,系統(tǒng)將提示您輸入密碼以保護(hù)SSH密鑰
對(duì)。最好使用SSH密鑰對(duì)的密碼,但這不是必需的,您可以通
過按Enter鍵跳過創(chuàng)建密碼。
注意:
如果要更改SSH密鑰對(duì)的密碼,可以使用
ssh-keygen -p <keyname>。
4.下一步是復(fù)制公共SSH密鑰,因?yàn)槲覀冎髮⑿枰? 要將公共SSH密鑰復(fù)制到剪貼板,請(qǐng)使用以下相應(yīng)的代碼:
蘋果系統(tǒng):
pbcopy < ~/.ssh/id_rsa.pub
GNU / Linux(需要xclip包):
xclip -sel clip < ~/.ssh/id_rsa.pub
Windows命令行:
type %userprofile%\.ssh\id_rsa.pub | clip
Windows / Windows PowerShell上的Git Bash:
cat ~/.ssh/id_rsa.pub | clip
最后一步是將您的公共SSH密鑰添加到GitLab。
導(dǎo)航到“配置文件設(shè)置”中的“SSH密鑰”選項(xiàng)卡。將您的密鑰粘貼
到“密鑰”部分,并為其指定相關(guān)的“標(biāo)題”。使用可識(shí)別的標(biāo)題,
如“工作筆記本電腦 - Windows 7”或“家用MacBook Pro 15”。
如果您手動(dòng)復(fù)制了公共SSH密鑰,請(qǐng)確保從ssh-rsa您的電子郵
件開始復(fù)制整個(gè)密鑰。
(可選)您可以通過運(yùn)行ssh -T git@example.com
(替換example.com為GitLab域)并驗(yàn)證是否收到Welcometo
GitLab消息來測(cè)試您的設(shè)置。
使用非默認(rèn)SSH密鑰對(duì)路徑
如果您使用GitLab SSH密鑰對(duì)的非默認(rèn)文件路徑,則必須配置
SSH客戶端以查找GitLab專用SSH密鑰以連接到GitLab服務(wù)器
(可能gitlab.com)。
對(duì)于當(dāng)前的終端會(huì)話,您可以使用以下命令(other_id_rsa使
用私有SSH密鑰替換)來執(zhí)行此操作:
Windows / GNU / Linux / macOS上的Git Bash:
eval $(ssh-agent -s)
ssh-add ~/.ssh/other_id_rsa
要保留這些設(shè)置,您需要將它們保存到配置文件中。對(duì)于
OpenSSH客戶端,這是在~/.ssh/config某些操作系統(tǒng)的文件中
配置的。以下是使用自己的SSH密鑰的兩個(gè)示例主機(jī)配置:
# GitLab.com server
Host gitlab.com
RSAAuthentication yes
IdentityFile ~/.ssh/config/private-key-filename-01
# Private GitLab server
Host gitlab.company.com
RSAAuthentication yes
IdentityFile ~/.ssh/config/private-key-filename
由于SSH客戶端種類繁多,配置選項(xiàng)非常多,因此對(duì)這些主題
的進(jìn)一步說明超出了本文檔的范圍。
公共SSH密鑰必須是唯一的,因?yàn)樗鼈儗⒔壎ǖ侥膸?。?
的SSH密鑰是通過SSH推送代碼時(shí)唯一的標(biāo)識(shí)符。這就是它需
要唯一映射到單個(gè)用戶的原因。
部署密鑰
每個(gè)存儲(chǔ)庫部署密鑰
部署密鑰允許使用單個(gè)SSH密鑰對(duì)對(duì)一個(gè)或多個(gè)項(xiàng)目進(jìn)行只讀
或讀寫(如果已啟用)訪問。
這對(duì)于將存儲(chǔ)庫克隆到Continuous Integration(CI)服務(wù)器非
常有用。通過使用部署密鑰,您不必設(shè)置虛擬用戶帳戶。
如果您是項(xiàng)目主數(shù)據(jù)或所有者,則可以在“存儲(chǔ)庫”部分下的項(xiàng)目
設(shè)置中添加部署密鑰。為新部署密鑰指定標(biāo)題并粘貼公共SSH
密鑰。在此之后,使用相應(yīng)私有SSH密鑰的計(jì)算機(jī)具有對(duì)項(xiàng)目
的只讀或讀寫(如果已啟用)訪問權(quán)限。
您無法使用表單兩次添加相同的部署密鑰。如果要將相同的密
鑰添加到另一個(gè)項(xiàng)目,請(qǐng)?jiān)凇皬目捎庙?xiàng)目部署密鑰”列表中啟用
它。您可以訪問的所有項(xiàng)目的所有部署密鑰都可用。該項(xiàng)目訪
問可以通過成為項(xiàng)目的直接成員或通過組來實(shí)現(xiàn)。
部署密鑰可以在項(xiàng)目之間共享,您只需將它們添加到每個(gè)項(xiàng)目
中。
全局共享部署密鑰
Global Shared Deploy鍵允許在整個(gè)GitLab安裝中的任何存儲(chǔ)
庫上配置只讀或讀寫(如果啟用)訪問。
這對(duì)于將存儲(chǔ)庫集成到安全的共享持續(xù)集成(CI)服務(wù)或其他
共享服務(wù)非常有用。GitLab管理員可以在GitLab中設(shè)置Global
Shared Deploy密鑰,并將私鑰添加到任何共享系統(tǒng)。當(dāng)項(xiàng)目掌
握(或更高)授權(quán)全局共享部署密鑰與其項(xiàng)目一起使用時(shí),各
個(gè)存儲(chǔ)庫選擇使用這些密鑰公開其代理。
與每個(gè)項(xiàng)目部署密鑰相比,全局共享密鑰可以提供更高的安全
性,因?yàn)槟繕?biāo)集成系統(tǒng)的管理員是唯一需要知道和配置私鑰的
人。
GitLab管理員在“ 部署密鑰 ”部分下的“管理”區(qū)域中設(shè)置Global
Deploy密鑰。確保密鑰具有有意義的標(biāo)題,因?yàn)檫@將是項(xiàng)目主
人和所有者識(shí)別要添加的正確Global Deploy密鑰的主要方式。
例如,如果密鑰提供對(duì)SaaS CI實(shí)例的訪問權(quán)限,則在密鑰名
稱中使用該服務(wù)的名稱(如果它是用于的全部)。在創(chuàng)建全局
共享部署密鑰時(shí),請(qǐng)考慮密鑰的粒度 - 它們的使用范圍非常狹
窄,例如只是特定服務(wù)或更廣泛的用途,例如“您需要提供對(duì)存
儲(chǔ)庫的讀取訪問權(quán)限”。
GitLab管理員添加全局部署密鑰后,項(xiàng)目主服務(wù)器和所有者可
以通過展開“ 部署密鑰”部分并單擊任何項(xiàng)目可用的公共部署密
鑰下列出的相應(yīng)密鑰旁邊的“ 啟用”,將其添加到項(xiàng)目的“設(shè)
置”>“存儲(chǔ)庫”部分中 。
注意:只有配置了至少一個(gè)Global Deploy Key時(shí),才會(huì)顯示任
何項(xiàng)目可用的標(biāo)題公共部署密鑰。
小心:警告:
定義全局部署密鑰不會(huì)通過密鑰公開任何給定的存儲(chǔ)庫,直到
該資源庫將Global Deploy密鑰添加到其項(xiàng)目中。通過這種方
式,全局部署密鑰可以啟用其他系統(tǒng)的訪問,但不要僅通過設(shè)
置它們來隱式地提供任何訪問。
應(yīng)用
如何將您的SSH密鑰添加到Eclipse:https://wiki.eclipse.org/EGit/User_Guide#Eclipse_SSH_Configuration
GitLab服務(wù)器上的SSH
GitLab與系統(tǒng)安裝的SSH守護(hù)程序集成,指定一個(gè)用戶(通常
是命名的git),通過該用戶處理所有訪問請(qǐng)求。通過SSH連接
到GitLab服務(wù)器的用戶通過SSH密鑰而不是用戶名來標(biāo)識(shí)。
在GitLab服務(wù)器上執(zhí)行的SSH 客戶端操作將作為該用戶執(zhí)行。
雖然可以修改此用戶的SSH配置,例如,提供私有SSH密鑰來
對(duì)這些請(qǐng)求進(jìn)行身份驗(yàn)證,但這種做法不受支持,并且強(qiáng)烈建
議不要這樣做,因?yàn)樗鼤?huì)帶來很大的安全風(fēng)險(xiǎn)。
GitLab檢查過程包括檢查此情況,如果您的服務(wù)器配置如下,
將指導(dǎo)您到此部分,例如:
$ gitlab-rake gitlab:check
# ...
Git user has default SSH configuration? ... no
Try fixing it:
mkdir ~/gitlab-check-backup-1504540051
sudo mv /var/lib/git/.ssh/id_rsa ~/gitlab-check-backup-
1504540051
sudo mv /var/lib/git/.ssh/id_rsa.pub ~/gitlab-check-backup-
1504540051 For more information see:
doc/ssh/README.md in section "SSH on the GitLab server"
Please fix the error above and rerun the checks.
只要你能夠刪除自定義配置。明確不支持這些自定義,并且可
能隨時(shí)停止工作。
故障排除
如果在Git克隆上,系統(tǒng)會(huì)提示您輸入密碼,例如
git@gitlab.com's password:
SSH設(shè)置有問題。
確保您正確生成了SSH密鑰對(duì),并將公共SSH密鑰添加到GitLab配置文件中
嘗試使用ssh-agent本文檔前面所述的手動(dòng)注冊(cè)私有SSH密鑰嘗
試通過運(yùn)行調(diào)試連接ssh -Tv git@example.com
(替換example.com為您的GitLab域)