我發現ssh-keygen
("ssh" 套件) 生成與puttygen
("油灰「 包裹)。
如果我使用某些 SSH 伺服器建立公鑰和私鑰,ssh-keygen
則不會接受我的金鑰。如果我puttygen
只用一台伺服器建立金鑰則接受它。
為什麼 Linux 儲存庫不為此提出一些通用的解決方案(套件)?
我找到了另一個包裹ssh-3.2.9.1它創建與 PuTTY 一起使用的密鑰。但為什麼 SSH 沒有任何方便的解決方案呢?
答案1
OpenSSH 是 SSH 協定事實上的標準實作。如果 PuTTY 和 OpenSSH 不同,則 PuTTY 是不相容的。
如果您使用預設選項透過 OpenSSH 產生金鑰ssh-keygen
,它幾乎適用於所有伺服器。不接受此類金鑰的伺服器將是古董,使用不同的 SSH 實現,或以奇怪的限制方式進行配置。某些伺服器可能不支援非預設類型的密鑰。特別是,ECDSA 金鑰使會話建立速度稍微快一些,但僅最新版本的 OpenSSH 支援它們。
PuTTY 使用不同的金鑰檔案格式。它附帶了工具轉變它自己的.ppk
格式和 OpenSSH 的格式之間的關係。
您找到的這個 ssh-3.2.9.1 是商業產品它有自己不同的私鑰格式。沒有任何理由使用它來代替 OpenSSH。它只能是相容性較差,需要付費,而且關於如何使用它的教程大約為零。
答案2
大多數 Linux 發行版都提供適用於 Linux 的 PuTTY(軟體包名稱putty
)。您可以在 Linux 端安裝 PuTTY 並用於puttygen
將 .ppk 檔案轉換為常規ssh
樣式金鑰檔案(稱為 PEM 檔案 - 即使它們的檔案名稱中沒有 .pem)。
puttygen id_dsa.ppk -O private-openssh -o id_dsa
筆記:您也可以使用puttygen
將樣式 PEM 檔案匯入ssh
回 PuTTY。
PuTTY 的作者選擇了簡單性,因此公鑰和私鑰構成了 PuTTY/ 使用的底層安全性SSH-2密鑰身份驗證儲存在單一專有 .ppk 檔案中。通常,這些密鑰由 維護為兩個單獨的檔案ssh
。
在 Linux 上,密鑰檔案通常保存在目錄中.ssh。
在這個 Stack Overflow 問題中,有一個關於轉換過程的很好的概述,標題為:將 PEM 轉換為 PPK 檔案格式。
PuTTY 的作者也討論了他在PuTTY 使用手冊。您可以在第 8.2.12 節中閱讀相關內容。
答案3
它們都儲存“SSH 協定版本 2 的 RSA 金鑰對”,並且可以轉換的可互換;但是,關於實際儲存格式的差異:
從https://www.chiark.greenend.org.uk/~sgtatham/putty/wishlist/key-formats-natively.html
PuTTY 金鑰格式的優點是:
- 密鑰的公共部分以明文形式存儲。OpenSSH的私鑰格式加密整個金鑰文件,這樣客戶端就必須先詢問您的密碼,然後才能使用金鑰執行任何操作。特別是,這意味著它必須先詢問您的密碼,然後才能提供向伺服器發送公鑰以進行身份驗證。 PuTTY 的格式以明文形式儲存公鑰,僅加密私鑰部分,這意味著它可以自動將公鑰發送到伺服器並確定伺服器是否願意接受使用該金鑰的身份驗證,並且它只會詢問如果確實需要,請輸入密碼。
我認為 OpenSSH 會.pub
出於此目的讀取一個文件,如果它與私鑰文件一起出現,但這常常是一個混亂的根源(我見過人們替換私鑰文件並留下一個過時的文件.pub
)它,然後對由此產生的SSH 身份驗證過程感到非常困惑!- 密鑰完全防篡改。以明文形式儲存公鑰的密鑰格式可能容易受到篡改攻擊,在這種攻擊中,密鑰的公共部分會被修改,從而使用篡改的密鑰進行的簽名會洩露有關私有部分的資訊。為此原因,PuTTY 的金鑰格式包含 MAC(訊息驗證碼)、密碼短語,並覆蓋金鑰的公共和私有部分。因此,我們提供了以明文形式提供公鑰的便利,但我們也立即檢測到任何篡改攻擊的嘗試,從而提供了安全性和便利性的結合,我認為這是任何其他金鑰格式所沒有的。作為一個附帶好處,MAC 還涵蓋了密鑰的註釋,防止有人交換兩個密鑰並交換註釋時可能發生的任何惡作劇。
OpenSSH 保持公鑰加密的方法可能也提供了一些針對此類攻擊的安全性,但尚不清楚它是否提供了適當的保護:為保密而設計的加密通常會留下攻擊者可以有效修改加密資料的方法。為了實現真正的完整性保護,您需要一個真正的專用 MAC,它的設計正是為了實現這一點。
[強調添加]