将OpenSSH私钥转换为SSH2私钥


29

有没有一种方法可以将现有的一对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只为私有或公共输入密钥生成了公共密钥。

我做错了还是正常现象?

Answers:


43

本标题为SSH的教程:将OpenSSH转换为SSH2,反之亦然,这似乎可以提供您所需要的东西。

将OpenSSH密钥转换为SSH2密钥

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

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

将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

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

将此用于私钥和公钥吗?

根据手册页,答案是肯定的。查看手册页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 ----

谷歌搜索了一下我从一篇标题为:如何将OpenSSH私钥文件转换为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程序中。但是,腻子和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

3
私钥转换又如何呢?
ДМИТРИЙМАЛИКОВ

@ДМИТРИЙМАЛИКОВ-为什么会那么重要?我尝试了它,它似乎适用于私钥或公钥。
slm

1
不确定它是否为我返回有效的私钥:$> a="$(ssh-keygen -e -f ~/.ssh/id_rsa)m"; b="$(ssh-keygen -e -f ~/.ssh/id_rsa.pub)m"; md5sum <<< $a; md5sum <<< $b ce615aa3e39e274d0bd81064399cedf8 - ce615aa3e39e274d0bd81064399cedf8 -。原始文件的哈希值不同。似乎是它返回私有或公共输入密钥的公共密钥。
ДМИТРИЙМАЛИКОВ

@ДМИТРИЙМАЛИКОВ-看到我对答案的更新。您是对的,这ssh-keygen是在回馈公钥。我已经根据其他研究结果制定了一种方法。LMK(如果可以)。
slm

1
的puttygen属性可以是棘手:puttygen <OpenSSH_priv_key> -O public -o id_rsa_ssh2_puttygen{.pub}-O代表输出- -o对输出- 文件)。从OpenSSH 7.0生成的rsa 2048位私有密钥生成ssh2私有密钥和公共密钥。在Win Phone 7.5客户端(* Tommi Pirttiniemi的SSH客户端)上不起作用。但是,感谢@ДМИТРИЙМАЛИКОВ和@slm的出色回答。@Otheus puttygen随附putty在Arch上。
tuk0z

1

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

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

ssh-keygen -p -f ~/.ssh/id_rsa -m pem

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

ssh-keygen -p -P '' -N ''-f ~/.ssh/id_rsa -m pem
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.