如何在Linux下将.ppk密钥转换为OpenSSH密钥?


188

我知道在Windows下可以在puttygen下转换.ppk,但是在Linux上怎么做呢?这可能吗 ?

Answers:


275

用腻子来做。

  • Linux:使用您的软件包管理器,安装PuTTY(或更小的PuTTY工具):

    • 的Ubuntu sudo apt-get install putty-tools
    • 类Debian apt-get install putty-tools
    • 基于RPM yum install putty
    • Gentoo emerge putty
    • Archlinux sudo pacman -S putty
    • 等等
  • OS X:安装Homebrew,然后运行brew install putty

将密钥放置在某个目录中,例如主文件夹。现在将PPK密钥转换为SSH密钥对:缓存搜索

生成私钥

cd ~
puttygen id_dsa.ppk -O private-openssh -o id_dsa

并生成公共密钥:

puttygen id_dsa.ppk -O public-openssh -o id_dsa.pub

将这些密钥移到~/.ssh并确保将您的私钥的权限设置为private:

mkdir -p ~/.ssh
mv -i ~/id_dsa* ~/.ssh
chmod 600 ~/.ssh/id_dsa
chmod 666 ~/.ssh/id_dsa.pub

如果您已经尝试执行“ git clone ”操作,则可能还需要执行此操作

chmod 666 ~/.ssh/known_hosts

嗨,我已经有一个.pub,然后需要再次创建公钥
Amit Bera 2014年

1
如果您是来这里寻找如何在Windows中执行此操作的,请运行“ puttygen yourkey.ppk”,然后在“转换”菜单下选择“导出OpenSSH密钥”以获取私钥。
Ryan Shillington 2014年

1
@jous的解决方案要好得多,因为您不需要私钥来转换公钥,也不需要安装腻子
Tobi,2015年

我必须将此密钥添加到我的./ssh/config文件中 Host mysite.com Hostname mysite.com IdentityFile ~/.ssh/id_dsa IdentitiesOnly yes
vladkras

某些椭圆曲线格式(ECDS等)仅在beta油灰工具中可用。
Daniel W.

39
ssh-keygen -i -f id_dsa_1024_a.pub > id_dsa_1024_a_openssh.pub
  • -i 标志是从非OpenSSH格式导入的
  • -f 标志表示从输入文件中读取

资料来源:burnz.wordpress.com上的博客


17
.ppk文件是完整的密钥对,我不认为上面的命令或博客文章适用于此。
彼得·贝克尔

2
我想我的意思是,如果您使用puttygen的“保存公共密钥”按钮,它会起作用。ssh-keygen无法理解真正的.ppk文件,因为它们缺少那些'---- BEGIN SSH2 PUBLIC KEY ----'标记。不过,您可以在.ppk文件中的“ Public-Lines:..”行和“ Private-Lines:..”行之间找到公钥。
2014年

1
这对我来说是一个公共密钥文件-puttygen似乎需要一个私有密钥。似乎所做的一切只是将base-64部分重新排列为一条直线
Jasen 2015年

2
这似乎不包括私钥,这就是为什么我要进行转换,因为我已经在某个地方保存了公钥了……
Gert van den Berg

是的,我见过的ppk文件具有适当的标记,并且效果很好
tylerl

5

获取私钥:

在puttygen中打开.ppk文件:

puttygen ~/.ssh/id_dsa.ppk

导出为openssh:

转换→导出OpenSSH密钥

获取公钥:

像使用puttygen 的私钥之前一样打开,公钥位于公钥下, 用于粘贴到OpenSSH Authorized_keys文件中


4

我准备了一个Docker容器以简化生活:

docker run --rm \
           --volume=/path/to/file.ppk:/tmp/id_dsa.ppk \
           --volume=/path/to/output:/tmp/out/ \
           czerasz/putty-tools

哪里:

  • /path/to/file.ppk -您的ppk文件的本地路径
  • /path/to/output -放置私钥和公钥的本地路径

1
大。图片谢谢!但是与此同时--volume=/path/to/file.ppk:/tmp/id.ppk,并非如此id_dsa.ppk
pHiL
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.