Ssh

將 OpenSSH 私鑰轉換為 SSH2 私鑰

  • July 12, 2019

有沒有辦法將現有的 OpenSSH 密鑰對轉換為 SSH2(ssh.com 格式)密鑰對?

UPD:既然有一些關於ssh-keygen突然出現的答案,我會解釋我來自哪裡(這也是一個很好的答案“你試過什麼?”)。

$> diff --report-identical-files <(ssh-keygen -e -f ~/.ssh/id_dsa) <(ssh-keygen -e -f ~/.ssh/id_dsa.pub)
Files /tmp/zshAGGWAK and /tmp/zshPZiIr6 are identical

換句話說,ssh-keygen為私鑰和公鑰輸入密鑰返回相同的密鑰(原始文件的雜湊值明顯不同,我已經檢查了兩次以確保它們是有效的私鑰和公鑰)。似乎ssh-keygen只為私人或公共輸入密鑰生成公共密鑰。

我做錯了還是這是正常行為?

本教程標題為:SSH:將 OpenSSH 轉換為 SSH2,反之亦然,似乎提供了您正在尋找的東西。

將 OpenSSH 密鑰轉換為 SSH2 密鑰

在您的 OpenSSH 公鑰上執行 OpenSSH 版本,ssh-keygen以將其轉換為遠端電腦上 SSH2 所需的格式。這必須在執行 OpenSSH 的系統上完成。

$ ssh-keygen -e -f ~/.ssh/id_dsa.pub > ~/.ssh/id_dsa_ssh2.pub

將 SSH2 密鑰轉換為 OpenSSH 密鑰

在您的 ssh2 公鑰上執行 OpenSSH 版本,ssh-keygen以將其轉換為 OpenSSH 所需的格式。這需要在執行 OpenSSH 的系統上完成。

$ ssh-keygen -i -f ~/.ssh/id_dsa_1024_a.pub > ~/.ssh/id_dsa_1024_a_openssh.pub

本教程繼續展示如何生成各種類型的密鑰以及如何將它們導出為其他格式。

將此用於私鑰和公鑰?

根據手冊頁,答案是肯定的。查看它的手冊頁,該開關ssh-keygen說明了以下內容:-e

-e    This option will read a private or public OpenSSH key file and print
      the key in RFC 4716 SSH Public Key File Format to stdout.  This option
      allows exporting keys for use by several commercial SSH implementations.

但在實踐中,似乎ssh-keygen無法轉換私鑰,只能轉換公鑰。

例如:

# Make a new RSA key-pair
$ ssh-keygen -t rsa -f newkey

# attempt to extract the private key
$ ssh-keygen -e -f newkey > newkey_e

# attempt to extract the public key
$ ssh-keygen -e -f newkey.pub > newkey.pub_e

# Notice the supposed extracted private key (newkey_e) and the corresponding extracted public key (newkey.pub_e) have identical `md5sum`'s.
$ for i in *;do md5sum $i;done
d1bd1c12c4a2b9fee4b5f8f83150cf1a  newkey
8b67a7be646918afc7a041119e863be5  newkey_e
13947789d5dcc5322768bd8a2d3f562a  newkey.pub
8b67a7be646918afc7a041119e863be5  newkey.pub_e

查看生成的提取密鑰證實了這一點:

$ grep BEGIN newkey_e newkey.pub_e 
newkey_e:---- BEGIN SSH2 PUBLIC KEY ----
newkey.pub_e:---- BEGIN SSH2 PUBLIC KEY ----

Google搜尋了一下,我從一篇標題為:如何將 OpenSSH 私鑰文件轉換為 SSH的文章中看到了這個簡介。該網站似乎上下波動,但在Google 的記憶體中查找此頁面時,我發現了以下內容:

如何將 OpenSSH 私鑰文件轉換為 SSH.com 私鑰文件?

ssh-keygen 程序不能做到這一點,儘管大多數手冊頁都說它可以。他們不鼓勵這樣做,因此您將使用多個公鑰。唯一的問題是 RCF 不允許您註冊多個公鑰。

本文繼續介紹一種通過使用PuTTY 工具將 openssh 私鑰轉換為 ssh.com 私鑰的puttygen方法。注意: puttygen可以從 Windows 和 Linux 執行。

打開“puttygen”並生成一個 2048 位 rsa 公鑰/私鑰對。確保在生成密碼後添加密碼。將公鑰保存為“puttystyle.pub”,將私鑰保存為“puttystyle”。putty 程序和 SSH.com 程序共享公共密鑰格式,但 putty 程序和 OpenSSH 具有不同的公共密鑰格式。我們稍後再討論這個問題。您應該能夠將兩個 puttystyle 鍵載入到 putty 程序中。但是,putty 和 SSH.com 的私鑰格式不一樣,因此您必須創建一個轉換後的文件。轉到轉換菜單並導出 SSH.com 密鑰。將其保存為“sshstyle”。現在返迴轉換菜單並導出一個 openssh 密鑰。將其保存為“openssh”。這些名稱是任意的,您可以選擇自己的名稱。稍後您將不得不更改名稱以便在 OpenSSH 機器上進行安裝。見下文。

鑑於上述情況,我puttygen使用我們之前生成的私有/公共 openssh 密鑰對計算了以下內容:

# generate ssh.com private key from private openssh key
$ puttygen newkey -O private-sshcom -o newkey.puttygen-sshcom

# generate ssh.com public key from private openssh key
$ puttygen newkey -O public -o newkey.pub_puttygen-sshcom

# generate openssh public key from private openssh key (for confirmation)
$ puttygen newkey -O public-openssh -o newkey.pub_puttygen-openssh

註釋是不同的,因此您不能只比較生成的文件,因此如果您查看鍵的前幾行,則可以很好地表明上述命令是成功的。

公共 ssh.com 密鑰的比較:

$ tail -n +3 newkey.pub_e | head -1 | cut -c 1-60
AAAAB3NzaC1yc2EAAAADAQABAAABAQDFkZdpmbze9c6pT883rE1i64TJd4wb

$ tail -n +3 newkey.pub_puttygen-sshcom | head -1 | cut -c 1-60
AAAAB3NzaC1yc2EAAAADAQABAAABAQDFkZdpmbze9c6pT883rE1i64TJd4wb

公開 openssh 密鑰的比較:

$ cut -c 1-100 newkey.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDFkZdpmbze9c6pT883rE1i64TJd4wbz9x/w6I2DmSZVI9TJa6M9jgGE952QsOY

$ cut -c 1-100 newkey.pub_puttygen-openssh 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDFkZdpmbze9c6pT883rE1i64TJd4wbz9x/w6I2DmSZVI9TJa6M9jgGE952QsOY

引用自:https://unix.stackexchange.com/questions/84060