更新時間:2022-02-09 09:41:59 來源:動力節點 瀏覽3457次
當我們與遠程 Git 服務器(例如 GitHub)交互時,我們必須在請求中包含憑據。這證明我們是一個特定的 GitHub 用戶,他們可以做任何我們要求做的事情。
Git 可以使用 HTTPS 或 SSH 這兩種協議之一與遠程服務器通信,并且不同的協議使用不同的憑據。
在這里,我們描述了 SSH 協議的憑據設置。如果您不確定是使用 HTTPS 還是 SSH,請閱讀HTTPS 與 SSH。從現在開始,我們假設您已有意選擇設置 SSH 密鑰。
1.SSH 密鑰
與單獨使用密碼相比,SSH 密鑰提供了一種更安全的登錄服務器方式。雖然最終可以通過蠻力攻擊破解密碼,但僅靠蠻力幾乎不可能破譯 SSH 密鑰。生成密鑰對會為您提供兩個長字符串:公鑰和私鑰。您可以將公鑰放在任何服務器上(例如 GitHub!),然后通過使用已經擁有私鑰的客戶端(您的計算機!)連接到它來解鎖它。當兩者匹配時,系統無需密碼即可解鎖。您可以通過使用密碼保護私鑰來進一步提高安全性。
改編自GitHub和Digital Ocean提供的說明。
2.SSH 概述和建議
必須發生的事情的高級概述:
創建公私 SSH 密鑰對。從字面上看,2 個特殊文件,在一個特殊的地方。(可選)使用密碼加密私鑰(最佳實踐)。
將私鑰添加到您的 ssh-agent。如果您使用密碼保護它,您可能需要額外的配置。
將您的公鑰添加到您的 GitHub 個人資料中。
建議:
如果您是編程和 shell 的新手,起初您可能會發現 HTTPS 更容易(第9章)。您以后可以隨時切換到 SSH。您可以使用計算機 A 中的一種方法和計算機 B 中的另一種方法。
您應該定期更換您的 SSH 密鑰。一年一次之類的。
最佳做法是使用密碼保護您的私鑰。這會使設置和使用變得更加困難,因此,如果您(還)還沒有準備好,請不要使用密碼或認真考慮改用 HTTPS。
不要為了只有一對密鑰,在多臺計算機上重復使用而做奇怪的體操。您可能應該每臺計算機都有一個密鑰(我這樣做)。有些人甚至每臺計算機、每項服務都有一個密鑰(我不這樣做)。
將多個公鑰與您的 GitHub 帳戶關聯是正常的。例如,您連接的每臺計算機都有一個公鑰。
3.你已經有鑰匙了嗎?
您可以從 RStudio 或 shell 進行檢查。
全球建議:如果您確實有現有的密鑰,但不知道它們來自哪里或為什么創建它們,您應該認真考慮創建一個新的 SSH 密鑰對。由您決定是否/如何刪除舊的。但不要讓這阻止您創建新密鑰并繼續前進。
(1)來自 RStudio
轉到工具 > 全局選項...> Git/SVN。~/.ssh/id_rsa如果您在 SSH RSA 密鑰框中看到類似內容,則您肯定有現有的密鑰。
警告:RStudio 僅查找名為id_rsaand的密鑰對id_rsa.pub。這是有道理的,因為從歷史上看,這是最常見的。
然而,現在 GitHub 和 GitLab 都在鼓勵用戶使用 Ed25519 算法生成 SSH 密鑰,這會產生一個名為id_ed25519and的密鑰對id_ed25519.pub。在撰寫本文時,RStudio 不會顯示這樣的密鑰對,這可能會造成混淆。因此,最好同時檢查 shell 中的現有密鑰。
(2)從外殼
轉到外殼(附錄A)。
列出現有鍵:
ls -al ~/.ssh/
如果您被告知~/.ssh/不存在,則說明您沒有 SSH 密鑰!
如果您看到id_rsa.pubandid_rsa或id_ed25519and之類的一對文件id_ed25519.pub,則您已經有了一個密鑰對。典型的模式是id_FOO.pub(公鑰)和id_FOO(私鑰),其中FOO反映了密鑰類型。如果您樂于使用現有密鑰,請跳至有關向 ssh-agent 和 GitHub 添加密鑰的部分。
4.創建 SSH 密鑰對
(1)選項 1:從 RStudio 設置
轉到工具 > 全局選項...> Git/SVN > 創建 RSA 密鑰...。
RStudio 會提示您輸入密碼。它是可選的,但也是最佳實踐。使用受密碼保護的密鑰配置系統以實現平穩運行會引入更多移動部件。如果您完全是新手,請跳過密碼(或使用 HTTPS!)并在下次您對系統配置更熟悉時實施它。起初我沒有使用密碼,但現在我使用了,并將其記錄在密碼管理器中。
單擊“創建”,RStudio 將生成一個 SSH 密鑰對,存儲在文件~/.ssh/id_rsa和~/.ssh/id_rsa.pub.
請注意,RStudio 目前只生成 RSA 密鑰,而 GitHub 和 GitLab 的標準建議是使用 Ed25519 密鑰。如果您想遵守該建議,請暫時在 shell 中生成您的密鑰。
(2)選項 2:從 shell 設置
像這樣創建密鑰對,但替換對您有意義的注釋,特別是如果您的生活中有多個 SSH 密鑰。考慮與您的 GitHub 帳戶關聯的電子郵件或您的計算機名稱或某種組合,例如 [email protected]或jane-2020-macbook-pro。
ssh-keygen -t ed25519 -C "DESCRIPTIVE-COMMENT"
如果您的系統似乎太舊而無法支持 Ed25519 算法,請改為執行以下操作:
ssh-keygen -t rsa -b 4096 -C "DESCRIPTIVE-COMMENT"
接受將密鑰保存在默認位置的建議。只需在此處按 Enter:
Enter file in which to save the key (/Users/jenny/.ssh/id_ed25519):
您可以選擇使用密碼保護密鑰。它是可選的,但也是最佳實踐。使用受密碼保護的密鑰配置系統以實現平穩運行會引入更多移動部件。如果您完全是新手,請跳過密碼短語并在下次對系統配置更熟悉時實施它。起初我沒有使用密碼,但現在我使用了,并將其記錄在密碼管理器中。
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
該過程現在應該完成并且應該看起來像這樣:
~ % 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 有關密鑰,尤其是設置它以管理密碼(如果您選擇設置一個)。
事情在這里變得有點特定于操作系統。如有疑問,請查閱GitHub 的 SSH 說明,該說明適用于 Mac、Windows 和 Linux。它還比我能解釋更多不尋常的情況。
1)Mac 操作系統
確保 ssh-agent 已啟用。這是成功的樣子(pid會有所不同):
~ % eval "$(ssh-agent -s)"
Agent pid 15360
有時這會像這樣失敗:
~ % eval "$(ssh-agent -s)"
mkdtemp: private socket dir: No such file or directory
類似的失敗可能會報告為“權限被拒絕”。您應該以超級用戶身份再試一次。完成后不要忘記使用exit回到您的普通用戶帳戶!
~ % sudo su
Password:
sh-3.2# eval "$(ssh-agent -s)"
Agent pid 15385
sh-3.2# exit
exit
將您的密鑰添加到 ssh 代理。如果您設置了密碼,您將在這里受到挑戰。給它。該-K選項將您的密碼存儲在鑰匙串中。
~ % 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 及更高版本,則需要再做一件事。創建一個~/.ssh/config包含以下內容的文件:
Host *
AddKeysToAgent yes
UseKeychain yes
IdentityFile ~/.ssh/id_ed25519
UseKeychain如果您沒有使用密碼短語,您可以省略該行。但如果你這樣做了,這應該將你的密碼永久存儲在鑰匙串中。否則,您每次登錄時都必須輸入它。有用的 StackOverflow 線程:如何將我的 SSH 私鑰永久添加到 Keychain,以便它自動可用于 ssh?.
2)窗口
在 Git Bash shell 中,確保 ssh-agent 正在運行:
$ eval $(ssh-agent -s)
Agent pid 59566
添加您的密鑰,用正確的名稱替換您的密鑰。
$ ssh-add ~/.ssh/id_ed25519
3)Linux
在 shell 中,確保 ssh-agent 正在運行:
$ eval "$(ssh-agent -s)"
Agent pid 59566
添加您的密鑰,用正確的名稱替換您的密鑰。
ssh-add ~/.ssh/id_ed25519
5.向 GitHub 提供公鑰
現在我們將您的公鑰副本存儲在 GitHub 上。
(1)RStudio 到剪貼板
轉到工具 > 全局選項...> Git/SVN。如果您的密鑰對命名為id_rsa.puband id_rsa,RStudio 將看到它并提供“查看公鑰”。這樣做并接受復制到剪貼板的提議。
如果您的密鑰對命名不同,例如id_ed25519.puband id_ed25519,您將不得不以另一種方式復制公鑰。
(2)Shell 到剪貼板
將公鑰復制到剪貼板上。例如,~/.ssh/id_ed25519.pub在編輯器中打開并將內容復制到剪貼板。或者在命令行執行以下操作之一:
蘋果系統: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 上
現在我們向 GitHub 注冊公鑰。單擊右上角的個人資料圖片,然后轉到“設置”>“SSH 和 GPG 密鑰”。單擊“新建 SSH 密鑰”。將您的公鑰粘貼到“密鑰”框中。給它一個信息性標題,大概是在創建密鑰期間重復您在上面使用的描述性注釋。單擊“添加 SSH 密鑰”。
理論上,我們完成了!您可以使用它ssh -T [email protected]來測試您與 GitHub 的連接。如果大家想了解更多相關知識,可以關注一下動力節點的SSH整合視頻教程,里面有更豐富的知識在等著大家去學習哦。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習