更新時(shí)間:2022-02-09 09:41:59 來源:動(dòng)力節(jié)點(diǎn) 瀏覽3475次
當(dāng)我們與遠(yuǎn)程 Git 服務(wù)器(例如 GitHub)交互時(shí),我們必須在請求中包含憑據(jù)。這證明我們是一個(gè)特定的 GitHub 用戶,他們可以做任何我們要求做的事情。
Git 可以使用 HTTPS 或 SSH 這兩種協(xié)議之一與遠(yuǎn)程服務(wù)器通信,并且不同的協(xié)議使用不同的憑據(jù)。
在這里,我們描述了 SSH 協(xié)議的憑據(jù)設(shè)置。如果您不確定是使用 HTTPS 還是 SSH,請閱讀HTTPS 與 SSH。從現(xiàn)在開始,我們假設(shè)您已有意選擇設(shè)置 SSH 密鑰。
1.SSH 密鑰
與單獨(dú)使用密碼相比,SSH 密鑰提供了一種更安全的登錄服務(wù)器方式。雖然最終可以通過蠻力攻擊破解密碼,但僅靠蠻力幾乎不可能破譯 SSH 密鑰。生成密鑰對會(huì)為您提供兩個(gè)長字符串:公鑰和私鑰。您可以將公鑰放在任何服務(wù)器上(例如 GitHub!),然后通過使用已經(jīng)擁有私鑰的客戶端(您的計(jì)算機(jī)!)連接到它來解鎖它。當(dāng)兩者匹配時(shí),系統(tǒng)無需密碼即可解鎖。您可以通過使用密碼保護(hù)私鑰來進(jìn)一步提高安全性。
改編自GitHub和Digital Ocean提供的說明。
2.SSH 概述和建議
必須發(fā)生的事情的高級(jí)概述:
創(chuàng)建公私 SSH 密鑰對。從字面上看,2 個(gè)特殊文件,在一個(gè)特殊的地方。(可選)使用密碼加密私鑰(最佳實(shí)踐)。
將私鑰添加到您的 ssh-agent。如果您使用密碼保護(hù)它,您可能需要額外的配置。
將您的公鑰添加到您的 GitHub 個(gè)人資料中。
建議:
如果您是編程和 shell 的新手,起初您可能會(huì)發(fā)現(xiàn) HTTPS 更容易(第9章)。您以后可以隨時(shí)切換到 SSH。您可以使用計(jì)算機(jī) A 中的一種方法和計(jì)算機(jī) B 中的另一種方法。
您應(yīng)該定期更換您的 SSH 密鑰。一年一次之類的。
最佳做法是使用密碼保護(hù)您的私鑰。這會(huì)使設(shè)置和使用變得更加困難,因此,如果您(還)還沒有準(zhǔn)備好,請不要使用密碼或認(rèn)真考慮改用 HTTPS。
不要為了只有一對密鑰,在多臺(tái)計(jì)算機(jī)上重復(fù)使用而做奇怪的體操。您可能應(yīng)該每臺(tái)計(jì)算機(jī)都有一個(gè)密鑰(我這樣做)。有些人甚至每臺(tái)計(jì)算機(jī)、每項(xiàng)服務(wù)都有一個(gè)密鑰(我不這樣做)。
將多個(gè)公鑰與您的 GitHub 帳戶關(guān)聯(lián)是正常的。例如,您連接的每臺(tái)計(jì)算機(jī)都有一個(gè)公鑰。
3.你已經(jīng)有鑰匙了嗎?
您可以從 RStudio 或 shell 進(jìn)行檢查。
全球建議:如果您確實(shí)有現(xiàn)有的密鑰,但不知道它們來自哪里或?yàn)槭裁磩?chuàng)建它們,您應(yīng)該認(rèn)真考慮創(chuàng)建一個(gè)新的 SSH 密鑰對。由您決定是否/如何刪除舊的。但不要讓這阻止您創(chuàng)建新密鑰并繼續(xù)前進(jìn)。
(1)來自 RStudio
轉(zhuǎn)到工具 > 全局選項(xiàng)...> Git/SVN。~/.ssh/id_rsa如果您在 SSH RSA 密鑰框中看到類似內(nèi)容,則您肯定有現(xiàn)有的密鑰。
警告:RStudio 僅查找名為id_rsaand的密鑰對id_rsa.pub。這是有道理的,因?yàn)閺臍v史上看,這是最常見的。
然而,現(xiàn)在 GitHub 和 GitLab 都在鼓勵(lì)用戶使用 Ed25519 算法生成 SSH 密鑰,這會(huì)產(chǎn)生一個(gè)名為id_ed25519and的密鑰對id_ed25519.pub。在撰寫本文時(shí),RStudio 不會(huì)顯示這樣的密鑰對,這可能會(huì)造成混淆。因此,最好同時(shí)檢查 shell 中的現(xiàn)有密鑰。
(2)從外殼
轉(zhuǎn)到外殼(附錄A)。
列出現(xiàn)有鍵:
ls -al ~/.ssh/
如果您被告知~/.ssh/不存在,則說明您沒有 SSH 密鑰!
如果您看到id_rsa.pubandid_rsa或id_ed25519and之類的一對文件id_ed25519.pub,則您已經(jīng)有了一個(gè)密鑰對。典型的模式是id_FOO.pub(公鑰)和id_FOO(私鑰),其中FOO反映了密鑰類型。如果您樂于使用現(xiàn)有密鑰,請?zhí)劣嘘P(guān)向 ssh-agent 和 GitHub 添加密鑰的部分。
4.創(chuàng)建 SSH 密鑰對
(1)選項(xiàng) 1:從 RStudio 設(shè)置
轉(zhuǎn)到工具 > 全局選項(xiàng)...> Git/SVN > 創(chuàng)建 RSA 密鑰...。
RStudio 會(huì)提示您輸入密碼。它是可選的,但也是最佳實(shí)踐。使用受密碼保護(hù)的密鑰配置系統(tǒng)以實(shí)現(xiàn)平穩(wěn)運(yùn)行會(huì)引入更多移動(dòng)部件。如果您完全是新手,請?zhí)^密碼(或使用 HTTPS!)并在下次您對系統(tǒng)配置更熟悉時(shí)實(shí)施它。起初我沒有使用密碼,但現(xiàn)在我使用了,并將其記錄在密碼管理器中。
單擊“創(chuàng)建”,RStudio 將生成一個(gè) SSH 密鑰對,存儲(chǔ)在文件~/.ssh/id_rsa和~/.ssh/id_rsa.pub.
請注意,RStudio 目前只生成 RSA 密鑰,而 GitHub 和 GitLab 的標(biāo)準(zhǔn)建議是使用 Ed25519 密鑰。如果您想遵守該建議,請暫時(shí)在 shell 中生成您的密鑰。
(2)選項(xiàng) 2:從 shell 設(shè)置
像這樣創(chuàng)建密鑰對,但替換對您有意義的注釋,特別是如果您的生活中有多個(gè) SSH 密鑰。考慮與您的 GitHub 帳戶關(guān)聯(lián)的電子郵件或您的計(jì)算機(jī)名稱或某種組合,例如 your_email@example.comormacbook-pro或jane-2020-macbook-pro。
ssh-keygen -t ed25519 -C "DESCRIPTIVE-COMMENT"
如果您的系統(tǒng)似乎太舊而無法支持 Ed25519 算法,請改為執(zhí)行以下操作:
ssh-keygen -t rsa -b 4096 -C "DESCRIPTIVE-COMMENT"
接受將密鑰保存在默認(rèn)位置的建議。只需在此處按 Enter:
Enter file in which to save the key (/Users/jenny/.ssh/id_ed25519):
您可以選擇使用密碼保護(hù)密鑰。它是可選的,但也是最佳實(shí)踐。使用受密碼保護(hù)的密鑰配置系統(tǒng)以實(shí)現(xiàn)平穩(wěn)運(yùn)行會(huì)引入更多移動(dòng)部件。如果您完全是新手,請?zhí)^密碼短語并在下次對系統(tǒng)配置更熟悉時(shí)實(shí)施它。起初我沒有使用密碼,但現(xiàn)在我使用了,并將其記錄在密碼管理器中。
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
該過程現(xiàn)在應(yīng)該完成并且應(yīng)該看起來像這樣:
~ % ssh-keygen -t ed25519 -C "jenny-2020-mbp"
Generating public/private ed25519 key pair.
Enter file in which to save the key (/Users/jenny/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /Users/jenny/.ssh/id_ed25519.
Your public key has been saved in /Users/jenny/.ssh/id_ed25519.pub.
The key fingerprint is:
SHA256:XUEaY/elhcQJz3M9jx/SdC0zh10lCA7uNpqgkm5G/R0 jenny-2020-mbp
The key's randomart image is:
+--[ED25519 256]--+
| . =o==oo*|
| . + =.=+B+|
| . o . @oB|
| . . . oO+|
| . . S . ..o.|
| o o . E . ...|
|+ . . + . .|
|.+ . . |
|o. |
+----[SHA256]-----+
(3)向 ssh-agent 添加密鑰
告訴您的 ssh-agent 有關(guān)密鑰,尤其是設(shè)置它以管理密碼(如果您選擇設(shè)置一個(gè))。
事情在這里變得有點(diǎn)特定于操作系統(tǒng)。如有疑問,請查閱GitHub 的 SSH 說明,該說明適用于 Mac、Windows 和 Linux。它還比我能解釋更多不尋常的情況。
1)Mac 操作系統(tǒng)
確保 ssh-agent 已啟用。這是成功的樣子(pid會(huì)有所不同):
~ % eval "$(ssh-agent -s)"
Agent pid 15360
有時(shí)這會(huì)像這樣失敗:
~ % eval "$(ssh-agent -s)"
mkdtemp: private socket dir: No such file or directory
類似的失敗可能會(huì)報(bào)告為“權(quán)限被拒絕”。您應(yīng)該以超級(jí)用戶身份再試一次。完成后不要忘記使用exit回到您的普通用戶帳戶!
~ % sudo su
Password:
sh-3.2# eval "$(ssh-agent -s)"
Agent pid 15385
sh-3.2# exit
exit
將您的密鑰添加到 ssh 代理。如果您設(shè)置了密碼,您將在這里受到挑戰(zhàn)。給它。該-K選項(xiàng)將您的密碼存儲(chǔ)在鑰匙串中。
~ % ssh-add -K ~/.ssh/id_ed25519
Enter passphrase for /Users/jenny/.ssh/id_ed25519:
Identity added: /Users/jenny/.ssh/id_ed25519 (jenny-2020-mbp)
如果您使用的是 macOS Sierra 10.12.2 及更高版本,則需要再做一件事。創(chuàng)建一個(gè)~/.ssh/config包含以下內(nèi)容的文件:
Host *
AddKeysToAgent yes
UseKeychain yes
IdentityFile ~/.ssh/id_ed25519
UseKeychain如果您沒有使用密碼短語,您可以省略該行。但如果你這樣做了,這應(yīng)該將你的密碼永久存儲(chǔ)在鑰匙串中。否則,您每次登錄時(shí)都必須輸入它。有用的 StackOverflow 線程:如何將我的 SSH 私鑰永久添加到 Keychain,以便它自動(dòng)可用于 ssh?.
2)窗口
在 Git Bash shell 中,確保 ssh-agent 正在運(yùn)行:
$ eval $(ssh-agent -s)
Agent pid 59566
添加您的密鑰,用正確的名稱替換您的密鑰。
$ ssh-add ~/.ssh/id_ed25519
3)Linux
在 shell 中,確保 ssh-agent 正在運(yùn)行:
$ eval "$(ssh-agent -s)"
Agent pid 59566
添加您的密鑰,用正確的名稱替換您的密鑰。
ssh-add ~/.ssh/id_ed25519
5.向 GitHub 提供公鑰
現(xiàn)在我們將您的公鑰副本存儲(chǔ)在 GitHub 上。
(1)RStudio 到剪貼板
轉(zhuǎn)到工具 > 全局選項(xiàng)...> Git/SVN。如果您的密鑰對命名為id_rsa.puband id_rsa,RStudio 將看到它并提供“查看公鑰”。這樣做并接受復(fù)制到剪貼板的提議。
如果您的密鑰對命名不同,例如id_ed25519.puband id_ed25519,您將不得不以另一種方式復(fù)制公鑰。
(2)Shell 到剪貼板
將公鑰復(fù)制到剪貼板上。例如,~/.ssh/id_ed25519.pub在編輯器中打開并將內(nèi)容復(fù)制到剪貼板。或者在命令行執(zhí)行以下操作之一:
蘋果系統(tǒng):pbcopy < ~/.ssh/id_ed25519.pub
視窗:clip < ~/.ssh/id_ed25519.pub
Linux:xclip -sel clip < ~/.ssh/id_ed25519.pub
Linux:如果需要,xclip通過apt-get或安裝yum。例如,sudo apt-get install xclip。
(3)在 GitHub 上
現(xiàn)在我們向 GitHub 注冊公鑰。單擊右上角的個(gè)人資料圖片,然后轉(zhuǎn)到“設(shè)置”>“SSH 和 GPG 密鑰”。單擊“新建 SSH 密鑰”。將您的公鑰粘貼到“密鑰”框中。給它一個(gè)信息性標(biāo)題,大概是在創(chuàng)建密鑰期間重復(fù)您在上面使用的描述性注釋。單擊“添加 SSH 密鑰”。
理論上,我們完成了!您可以使用它ssh -T git@github.com來測試您與 GitHub 的連接。如果大家想了解更多相關(guān)知識(shí),可以關(guān)注一下動(dòng)力節(jié)點(diǎn)的SSH整合視頻教程,里面有更豐富的知識(shí)在等著大家去學(xué)習(xí)哦。
初級(jí) 202925
初級(jí) 203221
初級(jí) 202629
初級(jí) 203743