如何儲存 SSH 金鑰?

如何儲存 SSH 金鑰?

我最近才開始使用 SSH 金鑰而不是密碼(當然要感謝 GitHub),所以請記住,我對整個概念還很陌生。目前我的密鑰只是位於 ~/.ssh 下,但我不確定這是否是一個好的做法。例如,如果我有多台機器,我需要複製我的私鑰,我認為這是不可取的。或者,如果我的硬碟壞了,那麼我將丟失這些金鑰,這(我猜)也是不可取的。

那麼,安全、方便、可靠地儲存 SSH 金鑰的最佳實踐是什麼?

似乎使用智能卡是一種選擇(請參閱用於儲存 gpg/ssh 金鑰的智慧卡 (Linux) - 我需要什麼?),這是最好的嗎?

更新:提出這個問題的原因是許多服務(例如 GitHub、AWS EC2)提供了有關如何設定 SSH 金鑰以使用該服務的指南,但幾乎沒有背景(例如,如果您已經產生了金鑰,該怎麼辦透過ssh-keygen[1],推薦的安全措施是什麼)。目前尚不清楚該資訊實際上是否不重要,或者您應該「預設」知道它。

總結到目前為止的答案(但請閱讀它們,如果您有需要添加的內容,請添加):在這種情況下,如果您將私鑰留在 ~/.ssh 中就可以了,只要您不讓其他人知道它們;但如果您遺失了金鑰(通常是這種情況),請確保您有另一種方式來存取服務來上傳或產生新金鑰。

[1] GitHub用於提供有關如何管理多個密鑰的協助

答案1

例如,如果我有多台機器,我需要複製私鑰,我認為這是不可取的。

不,實際上你不知道。如果您有多台計算機,則只需在每台計算機上建立一個單獨的私鑰即可。對於每個私鑰,只需使用相同的流程將相應的公鑰上傳到 GitHub 即可。

另外,如果我的硬碟壞掉了,我就會失去我的私鑰,這(我猜)也是不可取的。

並不真地;如果您遺失了私鑰,只需產生一個新的私鑰並上傳相應的公鑰即可。

就其價值而言,您是對的,複製私鑰是非常不可取的。理想情況下,私鑰應該在一個檔案中產生(~/.ssh/id_rsa例如)並且應該絕不保留該檔案 - 也就是說,永遠不應該複製、移動它,尤其不應該透過網路傳輸它。 (例如,我將它們排除在備份之外)由於非對稱身份驗證協定的性質,您只需擔心您的私鑰不會落入他人之手。如果你做得太過分了,而你自己也忘記了,那通常沒什麼大不了的。 (不要與不對稱混淆加密私鑰,例如 GPG 金鑰,您可能想要保留它。

答案2

有一個非常好的工具,名為 KeePass2(http://keepass.info/)與副檔名(http://lechnology.com/software/keeagent/

你可以在那裡儲存密碼、SSH 金鑰等等(在官方 KeePass 頁面上有很多更有用的擴充功能)
如果你想使用 SSH 金鑰自動登錄,你只需要安裝 PuTTY、Pageant 和帶有 KeeAgent 的 KeePass。如果配置正確,則無需在 PuTTY、Pageant 或 FileZilla 中設定金鑰。

我自己也用它,我對此感到非常高興。我有超過30 個VPS 和根伺服器,帶有一定數量的不同SSH 密鑰,我唯一要做的就是打開KeePass(它不是​​我的主要密碼保險箱),然後我只需要在控制台中輸入我的密碼。

答案3

我想補充一點,如果您使用相同的使用者帳戶來運行 ~/.ssh/ ,那麼您的瀏覽器可以讀取 ~/.ssh/ 。

嘗試一下!將您的瀏覽器指向您的私人的鍵入您的主目錄。好有趣。

因此,我建議將 ssh 金鑰儲存在另一個使用者帳戶的主目錄中。

關於保護密鑰的密碼短語

  • 如今,破解非隨機密碼的速度非常快。查看散列貓
    • (儘管隨機且長的 12 個以上字元的密碼仍然需要相當長的時間來暴力破解)
    • 因此,只要您使用良好的長密碼短語,AES 加密的 ssh 密鑰在可預見的將來就無法破解。看github推薦
  • 因此,某些網站無需 JavaScript 即可猜測取得您的金鑰。然後暴力破解密鑰離線。
  • 瀏覽器也可以使用 JS 查看您的剪貼簿。因此,複製貼上很長的密碼也會使您面臨更複雜的 JavaScript 攻擊的風險。

Look_at_keys.html

 9 <HTML>
10 <HEAD>
11 <TITLE>look at keys</TITLE>
12 </HEAD>
13 <FRAMESET cols="20%, 80%">
14   <FRAMESET rows="100, 200">
15       <FRAME src="/Users/yourname/.ssh/stuff.pem">
16       <FRAME src="blah.html">
17   </FRAMESET>
18   <FRAME src="contents_of_frame3.html">
19 </FRAMESET>
20 </HTML>

答案4

您可以將 ssh 金鑰儲存在加密分割區內的單獨目錄中。然後你可以使用 ssh 指向該目錄-i

ssh -i identity_file [email protected]

詳細描述 (man ssh):

-i 身分文件

選擇從中讀取公鑰認證的身份(私鑰)的檔案。協定版本1 的預設值為~/.ssh/identity,協定版本2 的預設值為~/.ssh/id_dsa、~/.ssh/id_ecdsa、~/.ssh/id_ed25519 和~/.ssh/id_rsa。文件可以也可以在設定檔中基於每個主機進行指定。
可以有多個 -i 選項(以及在設定檔中指定的多個身分)。如果CertificateFile指令沒有明確指定證書,ssh也會嘗試從透過將-cert.pub附加到身分檔案名稱而獲得的檔案名稱載入憑證資訊。

我的安全方法是將資訊分為私人資訊和一般資訊。我不想加密我的整個主分割區,這就是為什麼我將秘密文件(如 中的文件~/.ssh)複製到加密分割區。

我認為這提供了一些相當有效的安全性,因為惡意軟體不會在 ~/.ssh 中找到任何內容,並且可能不會掃描您的整個系統或 shell 配置檔案來查找該位置。

-F configfile 

設定設定檔的路徑。

PS 我會建立一個別名alias ssh='ssh -i ... -F ...'並將其放入您的個人資料中。

PPS 我還沒有檢查這一點,我不知道其他程式(如 git)如何使用這些 ssh 設定。

相關內容