SSH
Git是分布式版本控制系統,這意味着您可以在本地工作,但您也可以將更改共享或“推送”到其他服務器。在將更改推送到GitLab服務器之前,您需要一個用於共享信息的安全通信通道。
SSH協議提供此安全性,並允許您對GitLab遠程服務器進行身份驗證,而無需每次提供用戶名或密碼。
有關SSH協議如何工作的更詳細的解釋,我們建議您閱讀DigitalOcean的這本漂亮的教程。
查找現有的SSH密鑰對
在生成新的SSH密鑰對之前,檢查您的系統是否已經在默認位置通過打開shell或Windows上的“命令提示符”運行以下命令:
Windows命令提示符:
type %userprofile%\.ssh\id_rsa.pub
Windows / GNU / Linux / macOS / PowerShell上的Git Bash
cat ~/.ssh/id_rsa.pub
如果您看到一個字符串,ssh-rsa您已經有一個SSH密鑰對,您可以跳過下一個部分的生成部分,並跳到副本到剪貼板步驟。如果您沒有看到字符串或想要生成具有自定義名稱的SSH密鑰對繼續下一步。
注意:公共SSH密鑰也可以命名如下:
id_dsa.pub
id_ecdsa.pub
id_ed25519.pub
生成一個新的SSH密鑰對
要生成新的SSH密鑰對,請使用以下命令:
Windows / GNU / Linux / macOS上的Git Bash
ssh-keygen -t rsa -C "your.email@example.com" -b 4096
視窗:
或者在Windows上,您可以下載
PuttyGen
並按照本文檔來生成SSH密鑰對。
接下來,系統將提示您輸入文件路徑以保存SSH密鑰對。
如果您還沒有SSH密鑰對,請按Enter鍵使用建議的路徑。使用建議的路徑通常允許您的SSH客戶端自動使用SSH密鑰對,而不需要額外的配置。
如果你已經有了一個SSH密鑰對建議的文件路徑,則需要輸入一個新的文件路徑,並聲明此SSH密鑰對將在您使用什么主機.ssh/config文件,請參閱使用非默認的SSH密鑰對路徑工作
的更多信息。
輸入文件路徑后,系統將提示您輸入密碼以保護SSH密鑰對。使用SSH密鑰對的密碼是最佳做法,但不是必需的,您可以按Enter鍵跳過創建密碼。
注意:
如果要更改SSH密鑰對的密碼,可以使用
ssh-keygen -p <keyname>。
下一步是復制公共SSH密鑰,因為我們將需要它。
要將公共SSH密鑰復制到剪貼板,請使用以下相應的代碼:
MacOS的:
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。
導航到“配置文件設置”中的“SSH密鑰”選項卡。將您的密鑰粘貼到“密鑰”部分並給出相關的“標題”。使用可識別的標題,如“工作筆記本電腦 - Windows 7”或“家庭MacBook Pro 15”。
如果您手動復制公共SSH密鑰,請確保您復制了從ssh-rsa您的電子郵件開始和結尾的整個密鑰。
或者,您可以通過運行ssh -T git@example.com
(替換example.com為GitLab域)並驗證是否收到Welcome to GitLab消息來測試您的設置。
使用非默認SSH密鑰對路徑
如果您為GitLab SSH密鑰對使用非默認文件路徑,則必須配置SSH客戶端,以找到GitLab專用SSH密鑰以連接到GitLab服務器(也許gitlab.com)。
對於您當前的終端會話,您可以使用以下命令(替換other_id_rsa為您的私有SSH密鑰):
Windows / GNU / Linux / macOS上的Git Bash
eval $(ssh-agent -s)
ssh-add ~/.ssh/other_id_rsa
要保留這些設置,您需要將它們保存到配置文件中。對於OpenSSH客戶端,這在~/.ssh/config某些操作系統的文件中進行了配置。以下是使用自己的SSH密鑰的兩個主機配置示例:
# 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客戶端及其大量配置選項,對這些主題的進一步解釋超出了本文檔的范圍。
公共SSH密鑰必須是唯一的,因為它們將綁定到您的帳戶。您的SSH密鑰是通過SSH推送代碼時唯一的標識符。這就是為什么它需要唯一地映射到一個用戶。
部署密鑰
部署密鑰允許只讀或讀寫(如果啟用)使用單個SSH密鑰對訪問一個或多個項目。
這對於將存儲庫克隆到持續集成(CI)服務器非常有用。通過使用部署密鑰,您不必設置虛擬用戶帳戶。
如果您是項目主人或所有者,則可以在“Repository”部分的項目設置中添加部署密鑰。指定新的部署密鑰的標題並粘貼公共SSH密鑰。之后,使用相應的專用SSH密鑰的計算機具有對項目的只讀或讀寫(如果啟用)訪問。
您不能使用該表單兩次添加相同的部署密鑰。如果要將另一個項目添加到另一個項目中,請在“從可用項目部署密鑰”列表中啟用它。所有可訪問的項目的所有部署密鑰都可用。該項目的訪問可以通過作為項目的直接成員,或通過組來實現。
部署密鑰可以在項目之間共享,您只需要將它們添加到每個項目中即可。
應用
蝕
如何將您的SSH密鑰添加到Eclipse:https : //wiki.eclipse.org/EGit/User_Guide#Eclipse_SSH_Configuration
故障排除
如果在Git克隆中,系統將提示您輸入密碼,例如git@gitlab.com's password:
您的SSH設置有問題。
確保您正確生成SSH密鑰對,並將公共SSH密鑰添加到您的GitLab配置文件中
嘗試使用ssh-agent本文檔前面所述手動注冊您的私鑰
嘗試通過運行ssh -Tv git@example.com
(替換example.com您的GitLab域)來調試連接
