将 OpenSSH 私钥转换为 SSH2 私钥

ДМИ*_*КОВ 32 ssh openssh ssh2 ssh-keygen puttygen

有没有办法将现有的 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
Run Code Online (Sandbox Code Playgroud)

换句话说,ssh-keygen为私有和公共输入密钥返回相同的密钥(原始文件的哈希值明显不同,我已经检查了两次以确保它们是有效的私有密钥和公共密钥)。似乎ssh-keygen只为私人或公共输入密钥生成公钥。

我做错了还是正常行为?

slm*_*slm 46

本教程标题为:SSH:将 OpenSSH 转换为 SSH2,反之亦然,这似乎提供了您正在寻找的内容。

将 OpenSSH 密钥转换为 SSH2 密钥

ssh-keygen在您的 OpenSSH 公钥上运行 OpenSSH 版本,将其转换为远程计算机上 SSH2 所需的格式。这必须在运行 OpenSSH 的系统上完成。

$ ssh-keygen -e -f ~/.ssh/id_dsa.pub > ~/.ssh/id_dsa_ssh2.pub
Run Code Online (Sandbox Code Playgroud)

将 SSH2 密钥转换为 OpenSSH 密钥

ssh-keygen在您的 ssh2 公钥上运行 OpenSSH 版本,将其转换为 OpenSSH 所需的格式。这需要在运行 OpenSSH 的系统上完成。

$ ssh-keygen -i -f ~/.ssh/id_dsa_1024_a.pub > ~/.ssh/id_dsa_1024_a_openssh.pub
Run Code Online (Sandbox Code Playgroud)

本教程继续展示如何生成各种类型的密钥以及如何将它们导出为其他格式。

将此用于私钥和公钥?

根据手册页,答案是肯定的。查看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.
Run Code Online (Sandbox Code Playgroud)

但在实践中似乎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
Run Code Online (Sandbox Code Playgroud)

查看结果提取的密钥证实了这一点:

$ grep BEGIN newkey_e newkey.pub_e 
newkey_e:---- BEGIN SSH2 PUBLIC KEY ----
newkey.pub_e:---- BEGIN SSH2 PUBLIC KEY ----
Run Code Online (Sandbox Code Playgroud)

在谷歌上搜索了一下,我从一篇题为的文章中看到了这个简介:How do you convert OpenSSH Private key files to SSH。该网站似乎上下波动,但在Google 缓存中查找此页面时,我发现了以下内容:

如何将 OpenSSH 私钥文件转换为 SSH.com 私钥文件?

尽管大多数手册页都说可以,但 ssh-keygen 程序无法完成此操作。他们不鼓励这样做,因此您将使用多个公钥。唯一的问题是 RCF 不允许您注册多个公钥。

本文继续介绍一种通过使用PuTTY puttygen工具将 openssh 私钥转换为 ssh.com 私钥方法。注意: 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
Run Code Online (Sandbox Code Playgroud)

注释是不同的,所以你不能只比较生成的文件,所以如果你查看键的前几行,这是一个很好的指示,上面的命令是成功的。

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
Run Code Online (Sandbox Code Playgroud)

openssh 公钥对比:

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

$ cut -c 1-100 newkey.pub_puttygen-openssh 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDFkZdpmbze9c6pT883rE1i64TJd4wbz9x/w6I2DmSZVI9TJa6M9jgGE952QsOY
Run Code Online (Sandbox Code Playgroud)

  • 那么 **private** 密钥转换呢? (4认同)

小智 10

ssh-keygen不会以 pem 格式导出私钥,但会将现有的 openssh 私钥转换为 pem 格式,覆盖原始格式。您所要做的就是编辑密码。

~/.ssh/id_rsa文件从 OpenSSH 格式转换为 SSH2 (pem) 格式的命令是:

ssh-keygen -p -f ~/.ssh/id_rsa -m pem
Run Code Online (Sandbox Code Playgroud)

然后在提示处提供(旧)和新密码。它们可以相同,甚至都为空白。或者您可以使用-P(old passphrase) 和-N(new passphrase) 选项在命令行上提供它们。例如,如果密码是空白的,而您想保持这种状态:

ssh-keygen -p -P '' -N ''-f ~/.ssh/id_rsa -m pem
Run Code Online (Sandbox Code Playgroud)