
我正在努力學習這一點,而不是僅僅遵循指南,這樣當人們確實提出要求時(他們確實這樣做了),我就可以推薦適當的行動。這是我得到的。
首先,使用以下命令產生兩個密鑰:
ssh-keygen -b 2048 -t rsa -C comment -f ~/.ssh/id_rsa
然後將金鑰的公共部分推送到authorized_keys2檔案中
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys2
(然後將其 chmod 為 600 或類似值)
您將私鑰下載到您的電腦 (id_rsa) 並將其輸入到 Putty 中以供讀取和驗證。
這些是設定此公鑰/私鑰身份驗證以無密碼登入 SSH 的正確步驟嗎?
答案1
雖然您描述的步驟可行,但有問題。您正在目標(遠端)電腦上產生金鑰對,然後將私鑰檔案下載到本機系統。這裡存在著您不應忽視的安全隱憂:
- 如果遙控器已經洩露,那麼有人可能剛剛竊取了您的密碼。
- 如果遠端系統將來受到損害,攻擊者將可以存取您的私鑰檔案(以及使用離線強力攻擊來嘗試解密它的奢侈)。
由於您使用 ssh 金鑰對(嘗試)解決密碼驗證固有的一些問題,因此您通常希望這樣做:
在本機系統上產生密鑰對。理想情況下,私鑰將 (a) 永遠不會儲存在共用檔案系統(例如 NFS 主目錄)上,並且 (b) 永遠不會儲存在允許遠端登入的電腦上。
廣泛發佈公鑰。我將我的公鑰保存在網站上,以便我可以在需要時取得它們。將公鑰放入
authorized_keys
您要連接的系統上的相應文件中。
如果您特別偏執,您可以將私鑰儲存在拇指驅動器上,並且僅使用該驅動器將密鑰加載到正在運行的ssh-agent
.此時,您不再需要實際的密鑰檔案。
答案2
在客戶端系統上產生密鑰可能會更好。您最終可能會得到一個更大的authorized_keys 文件,但禁用受感染的系統會更容易。如果遷移伺服器的私鑰,則需要重新產生金鑰並將其遷移到所有客戶端系統。每個客戶端都應該有自己的密鑰。
Putty 用於puttygen
產生金鑰。puttygen
還將提供正確格式的公鑰以貼上到客戶端系統中。如果金鑰用於登入訪問,最好使用密碼保護金鑰。 Pageant
或ssh-agent
可用於將未受保護的金鑰保存在記憶體中,以便不需要在每次連線時重新輸入密碼。
新增一個金鑰並設定保護後,您可以新增其他金鑰,但需要重設權限。我通常會從系統上傳公鑰,其名稱類似於example.pub
其中 example 是密鑰所屬系統的名稱。
許多實作已恢復用作authorized_keys
密鑰檔案。此文件可用於限制接受金鑰的系統、強制運行命令、限制存取等。查看man
頁面以了解更多詳情。
在某些情況下,客戶端系統上擁有多個金鑰可能很有用。這樣做可以支援使用沒有密碼的密鑰運行的批次過程。
答案3
看起來不錯。許多人會以相反的方向執行此操作(在本地生成密鑰,然後將密鑰推.pub
送到伺服器),但兩者都可以工作。