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

mar*_*osh 226 linux ssh putty ssh-keys

我知道可以在 Windows 中的 puttygen 下转换 .ppk,但如何在 Linux 上进行转换?这可能吗 ?

Sta*_*ams 336

用腻子做。

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

并生成公共密钥:

puttygen id_dsa.ppk -O public-openssh -o id_dsa.pub
Run Code Online (Sandbox Code Playgroud)

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

mkdir -p ~/.ssh
mv -i ~/id_dsa* ~/.ssh
chmod 600 ~/.ssh/id_dsa
chmod 666 ~/.ssh/id_dsa.pub
Run Code Online (Sandbox Code Playgroud)

如果您已经尝试执行“ git clone ”操作,您可能也需要这样做

chmod 666 ~/.ssh/known_hosts
Run Code Online (Sandbox Code Playgroud)

  • 如果您来这里是想在 Windows 中执行此操作,请运行“puttygen yourkey.ppk”,然后在“转换”菜单下选择“导出 OpenSSH 密钥”以获取私钥。 (2认同)

jou*_*ous 44

ssh-keygen -i -f id_dsa_1024_a.pub > id_dsa_1024_a_openssh.pub
Run Code Online (Sandbox Code Playgroud)
  • -i 标志是从 openssh 格式以外的其他格式导入的
  • -f 标志表示从输入文件中读取

来源:一博文在burnz.wordpress.com

  • .ppk 文件是完整的密钥对,我不认为上面的命令或博客文章适用于此。 (21认同)
  • 我想我的意思是,如果您使用 puttygen 的“保存公钥”按钮,它会起作用。ssh-keygen 不理解真正的 .ppk 文件,因为它们缺少那些 '---- BEGIN SSH2 PUBLIC KEY ----' 标记。您可以在 .ppk 文件中的“Public-Lines:..”和“Private-Lines:..”之间找到公钥。 (2认同)
  • 这对我来说适用于公钥文件 - puttygen 似乎需要私钥。看起来它所做的只是将 base-64 部分重新排列成一行 (2认同)
  • 这似乎不包括私钥,这就是为什么我想要进行转换,我已经在某处保存了一个公钥...... (2认同)

小智 8

获取私钥:

在 puttygen 中打开 .ppk 文件:

puttygen ~/.ssh/id_dsa.ppk
Run Code Online (Sandbox Code Playgroud)

导出为 openssh:

转换?导出 OpenSSH 密钥

获取公钥:

像之前用puttygen打开私钥一样,公钥在 公钥下,用于粘贴到OpenSSHauthorized_keys文件中


cze*_*asz 5

我准备了一个 Docker 容器,让生活更简单:

docker run --rm \
           --volume=/path/to/file.ppk:/tmp/id_dsa.ppk \
           --volume=/path/to/output:/tmp/out/ \
           czerasz/putty-tools
Run Code Online (Sandbox Code Playgroud)

在哪里:

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

  • 您可能想添加“--network none” (5认同)
  • 伟大的。感谢图像!然而同时它的`--volume=/path/to/file.ppk:/tmp/id.ppk`而不是`id_dsa.ppk` (2认同)
  • 我收到“puttygen:加载'/tmp/id.ppk'时出错:PuTTY 密钥格式太新” (2认同)