如何将使用 PuTTYgen (Windows) 生成的 SSH 密钥对转换为 ssh-agent 和 Keychain (Linux) 使用的密钥对

Posted

技术标签:

【中文标题】如何将使用 PuTTYgen (Windows) 生成的 SSH 密钥对转换为 ssh-agent 和 Keychain (Linux) 使用的密钥对【英文标题】:How to convert SSH keypairs generated using PuTTYgen (Windows) into key-pairs used by ssh-agent and Keychain (Linux) 【发布时间】:2011-01-14 12:12:24 【问题描述】:

我使用 PuTTYgen 生成了密钥对,并一直使用 Pageant 登录,因此我只需在系统启动时输入一次密码。

如何在 Linux 中实现这一点?我听说过keychain,但我听说它使用不同的密钥对格式——我不想更改我的 Windows 密钥,如果我可以在 Windows 和 Linux 中以相同的方式无缝连接会很好。

【问题讨论】:

在 linux 中使用密钥也不应该有任何问题......只需将它们复制过来并将 pub 添加到授权密钥......虽然我承认我并不完全理解你的问题。 不,有 - 我知道 PuttyGen 和 ssh-agent 使用的密钥格式不同,它们必须明确转换 - 请参阅下面 Kaleb 的详细答案。 【参考方案1】:

puttygen 支持将您的私钥导出为 OpenSSH 兼容格式。然后,您可以使用 OpenSSH 工具重新创建公钥。

    打开 PuttyGen 点击加载 加载您的私钥 转到Conversions->Export OpenSSH 并导出您的私钥 将您的私钥复制到~/.ssh/id_dsa(或id_rsa)。

    使用ssh-keygen 创建公钥的 RFC 4716 版本

    ssh-keygen -e -f ~/.ssh/id_dsa > ~/.ssh/id_dsa_com.pub
    

    将 RFC 4716 版本的公钥转换为 OpenSSH 格式:

    ssh-keygen -i -f ~/.ssh/id_dsa_com.pub > ~/.ssh/id_dsa.pub
    

请参阅this 和this 了解更多信息。

【讨论】:

对于那些像我运行 cd ~/.sshchmod 700 id_rsa 那样得到 It is required that your private key files are NOT accessible by others 错误的人 你的意思是 chmod 600 id_rsa。该文件不需要是可执行的。 :) 这个答案是我使用无密码密钥从 Windows 命令行获取 ssh 的关键(特别是对于 git 访问)。如果我早点看到它会为我节省 小时 的痛苦!谢谢! 可以从 CLI 执行 puttygen 吗? 我认为这是新的东西,但是如果你在 puttygen 中打开你的私钥,那么它会自动在 UI 中显示一个与 OpenSSH 兼容、可复制的公钥字符串。【参考方案2】:

如果您只有来自用户的 PuTTY 格式的公钥,您可以将其转换为标准的 openssh 格式,如下所示:

ssh-keygen -i -f keyfile.pub > newkeyfile.pub

参考文献

来源:http://www.treslervania.com/node/408 镜像:https://web.archive.org/web/20120414040727/http://www.treslervania.com/node/408.

文章副本

我一直忘记这一点,所以我要在这里写。非极客,只是 继续走。

在 Windows 上制作密钥的最常用方法是使用 Putty/Puttygen。 Puttygen 提供了一个简洁的实用程序来将 linux 私钥转换为 腻子格式。但是,没有解决的是,当您保存 使用 puttygen 的公钥在 linux 服务器上不起作用。视窗 将一些数据放在不同的区域并添加换行符。

解决方案:当您进入创建您的公钥屏幕时 puttygen中的密钥对,复制公钥并将其粘贴到文本中 扩展名为 .pub 的文件。您将节省系统管理员时间 阅读这样的帖子感到沮丧。

但是,系统管理员,您总是会得到一个不可靠的密钥文件, 身份验证日志中没有错误消息,除了没有找到密钥,正在尝试 密码;即使其他人的钥匙都可以正常工作,并且 您已将此密钥发回给用户 15 次。

ssh-keygen -i -f keyfile.pub > newkeyfile.pub

应将现有的 puttygen 公钥转换为 OpenSSH 格式。

【讨论】:

另外,您可能希望从Comment: 行复制用户的评论并将其粘贴到与新密钥相同的行上,并用空格分隔。我不知道为什么 ssh-keygen 默认不会这样做。 这给了我一个错误:decode blob failed: invalid format 如果您阅读了原始文章,关键细节是这种方法仅在您通过其 UI 时从 puttygen 复制密钥时才有效,它不会从 puttygen 生成的文件转换已生成的密钥. 我可以使用相同的工具来转换它吗? 是的,看起来您正在查看:ssh-keygen -e -f openssh_key.pub > putty.pub【参考方案3】:

较新版本的PuTTYgen(我的是0.64)能够在.ssh/authorized_keys文件中显示要粘贴到linux系统中的OpenSSH公钥,如下图所示:

【讨论】:

这个答案涵盖了如何在使用 OpenSSH 格式的遥控器上设置密钥身份验证。但是为了在 Linux client 上使用 Putty 生成的密钥,这个答案是不够的。我遵循了公认的答案,效果很好。【参考方案4】:

或者,如果您想从 PuTTY 格式的密钥文件中获取私钥和​​公钥,您可以在 *nix 系统上使用 puttygen。对于大多数基于 apt 的系统,puttygenputty-tools 包的一部分。

从 PuTTY 格式的密钥文件中输出私钥:

$ puttygen keyfile.pem -O private-openssh -o avdev.pvk

对于公钥:

$ puttygen keyfile.pem -L

【讨论】:

如果由于某种原因您必须在 Windows 机器上执行此操作(无法安全地将所有密钥传输到 *nix)并且使用 GUI 有这么多密钥很麻烦,请尝试在 Cygwin 下编译 Unix 源代码.该 puttygen.exe 将为您提供如上所述的 CLI“批处理模式”。 OSX:brew install putty 应该反过来:puttygen inppk -O private-openssh -o outpemputtygen inppk -L(或 ssh-keygen -y -f outpem【参考方案5】:
sudo apt-get install putty

这将自动安装 puttygen 工具。

现在要转换 PPK 文件以与 SSH 命令一起使用,在终端中执行以下命令

puttygen mykey.ppk -O private-openssh -o my-openssh-key

然后,您可以通过 SSH 连接:

ssh -v user@example.com -i my-openssh-key

http://www.graphicmist.in/use-your-putty-ppk-file-to-ssh-remote-server-in-ubuntu/#comment-28603

【讨论】:

这并没有真正显示更多,answer by @John Jawed 中已经存在的内容 参数解释了它们代表什么。 +1 太棒了!这行得通。另外,在 Macos 上安装 putty : brew install putty【参考方案6】:

我最近在从用于 Linux 的 Putty 迁移到用于 Linux 的 Remmina 时遇到了这个问题。所以我的.putty 目录中有很多Putty 的PPK 文件,因为我已经使用了8 年了。为此,我使用了一个简单的for 命令让 bash shell 执行所有文件:

cd ~/.putty
for X in *.ppk; do puttygen $X -L > ~/.ssh/$(echo $X | sed 's,./,,' | sed 's/.ppk//g').pub; puttygen $X -O private-openssh -o ~/.ssh/$(echo $X | sed 's,./,,' | sed 's/.ppk//g').pvk; done;

非常快速且切中要害,完成了 putty 拥有的所有文件的工作。如果它找到带有密码的密钥,它将停止并首先询问该密钥的密码,然后继续。

【讨论】:

对于像我这样的懒惰的人,这里是复制粘贴以在 ubuntu 上获取 puttygen:sudo apt-get install putty-tools "simple" - 我不想看到复杂的!【参考方案7】:

在 linux 下创建密钥并使用 PuTTYgen 将密钥转换为 PuTTY 格式可能更容易。

PuTTY Faq: A.2.2

【讨论】:

不幸的是,如果您有必须使用的现有密钥,这不是一个选择。【参考方案8】:

我认为 TCSgrad 试图问的问题(几年前)是如何让 Linux 像他的 Windows 机器那样运行。也就是说,有一个代理(选美)持有私钥的解密副本,因此密码只需要输入一次。然后,ssh 客户端 putty 可以在没有密码提示的情况下登录其公钥被列为“已授权”的机器。

与此类似的是,Linux,充当 ssh 客户端,有一个代理持有解密的私钥,因此当 TCSgrad 键入“ssh host”时,ssh 命令将获取他的私钥并无需提示输入密码即可。当然,主机必须将公钥保存在 ~/.ssh/authorized_keys 中。

此场景的 Linux 模拟是使用 ssh-agent(选美模拟)和 ssh-add(将私钥添加到选美的模拟)完成的。

对我有用的方法是使用: $ ssh 代理 $SHELL $SHELL 是我需要让代理运行并保持运行的魔术。我在网上的某个地方发现了它,结果我的头撞墙了几个小时。

现在我们运行了一个模拟选美比赛,一个没有加载任何键的代理。

打字 $ ssh-添加 它本身将添加(默认情况下)在 ~/.ssh 中的默认身份文件中列出的私钥。

可以找到更多详细信息的网络文章here

【讨论】:

【参考方案9】:

PPK → OpenSSH RSA 与 PuttyGen 和 Docker。

私钥:

docker run --rm -v $(pwd):/app zinuzoid/puttygen private.ppk -O private-openssh -o my-openssh-key

公钥:

docker run --rm -v $(pwd):/app zinuzoid/puttygen private.ppk -L -o my-openssh-key.pub

另见https://hub.docker.com/r/zinuzoid/puttygen

【讨论】:

【参考方案10】:

比重新打开puttygen还要快,我经常做的是:

    复制公钥文件。 在副本中,将单词“ssh-rsa”放在开头。 删除开始/结束注释行和所有其他换行符。 保存。结果是一个适用于 openssh 的单行键。

【讨论】:

问题是关于使用钥匙链,所以关于私钥,而不是公钥。

以上是关于如何将使用 PuTTYgen (Windows) 生成的 SSH 密钥对转换为 ssh-agent 和 Keychain (Linux) 使用的密钥对的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Ubuntu 中使用 PuTTYgen 将 PEM 文件转换为 PPK?

如何使用puttygen生成密钥

windows 命令行配置linux免密登录

在windows下使用putty登陆linux

在 macOS 上将 .pem 转换为 .ppk

从 PPK 文件创建 PEM [重复]