如何将使用 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 ~/.ssh
和 chmod 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
参考文献
来源:文章副本
我一直忘记这一点,所以我要在这里写。非极客,只是 继续走。
在 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 的系统,puttygen
是 putty-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 outpem
和 puttygen 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) 使用的密钥对的主要内容,如果未能解决你的问题,请参考以下文章