如何使用終端創(chuàng)建SSH密鑰

 當(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域)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容