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


464

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

如何在Linux中实现这一目标?我听说过,keychain但是我听说它使用不同的密钥对格式-我不想更改Windows密钥,如果我可以在Windows和Linux中以相同的方式无缝连接,那就太好了。


在Linux中使用密钥也不应该有任何问题...只需将它们复制并添加到授权密钥中即可...尽管我当然不完全理解您的问题。
兰德尔·亨特

17
不,有-我非常了解PuttyGen和ssh-agent使用的密钥格式是不同的,因此必须进行显式转换-请参阅下面的Kaleb详细解答。
TCSGrad 2010年

Answers:


714

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

  1. 打开PuttyGen
  2. 点击加载
  3. 加载您的私钥
  4. 转到Conversions->Export OpenSSH并导出您的私钥
  5. 将您的私钥复制到~/.ssh/id_dsa(或id_rsa)。
  6. 使用以下命令创建RFC 4716版本的公共密钥 ssh-keygen

    ssh-keygen -e -f ~/.ssh/id_dsa > ~/.ssh/id_dsa_com.pub
    
  7. 将RFC 4716版本的公钥转换为OpenSSH格式:

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

这个这个以获取更多信息。


12
对于那些谁得到It is required that your private key files are NOT accessible by others的错误就像我跑cd ~/.sshchmod 700 id_rsa
专家

77
您的意思是chmod 600 id_rsa。该文件不需要是可执行文件。:)
sig11 2012年

2
这个答案是使用我的无密码密钥(特别是git access)从Windows命令行获取ssh的关键。如果我早些看过,会为我省下数小时的痛苦!谢谢!
cori

2
可以从CLI执行puttygen吗?
CMCDragonkai 2014年

20
我认为这是新事物,但是如果您在puttygen中打开私钥,那么它将在UI中自动显示与OpenSSH兼容的,可复制的公钥字符串。
2015年

161

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

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

参考资料

文章副本

我一直忘了这个,所以我要在这里写下。非极客,继续前进。

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

解决方案:在使用puttygen创建密钥对时进入公共密钥屏幕时,请复制公共密钥并将其粘贴到扩展名为.pub的文本文件中。这样您将节省sysadmin沮丧的工作时间。

但是,系统管理员总是会得到一个奇怪的密钥文件,该密钥文件不会在身份验证日志中抛出任何错误消息,只是找不到密钥,尝试输入密码。即使其他人的键工作正常,您也已将该键发送给用户15次。

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

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


2
另外,您可能希望从该Comment:行复制用户的注释,并将其粘贴到与新键相同的行上,并用空格分隔。我不知道为什么默认情况下ssh-keygen不会这样做。
Tobia '02

2
这给我一个错误:decode blob failed: invalid format
克里斯·斯特里钦斯基

如果您阅读原始文章,则密钥的详细信息是该方法仅在通过UI时从puttygen复制密钥时才有效,它将不会从puttygen生成的文件中转换已生成的密钥。
slm

我可以使用相同的工具将其转换为其他方式吗?
OlleHärstedt'18

是的,看起来就像您在看:ssh-keygen -e -f openssh_key.pub> putty.pub
Erik

148

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

在此处输入图片说明


7
此答案涵盖如何在使用OpenSSH格式的远程服务器上设置密钥认证。但是,为了在Linux 客户端上使用Putty生成的密钥,此答案是不够的。我遵循了公认的答案,并且效果出色。
wberry

52

另外,如果您想从PuTTY格式的密钥文件中获取私钥和​​公钥,则可以puttygen在* nix系统上使用。对于大多数基于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“批处理模式”。
Toddius Zho,2013年

2
OSX:brew install putty
JuhaPalomäki16年

1
应该颠倒过来:puttygen inppk -O private-openssh -o outpemputtygen inppk -L(或ssh-keygen -y -f outpem
dave_thompson_085 '16

27
sudo apt-get install putty

这将自动安装puttygen工具。

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

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



这些论点解释了它们代表什么。+1
danronmoon

大!这可行。另外,要在Macos上安装腻子:brew install putty
Dylan B

14

我最近从Linux的Putty迁移到Linux的Remmina时遇到了这个问题。因此,我使用.putty目录已经有8年了,因此我的目录中有许多用于Putty的PPK文件。为此,我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;

很快并且很关键,完成了腻子所有文件的工作。如果找到带有密码的密钥,它将停止并先询问该密钥的密码,然后继续。


2
对于像我这样的懒人,请复制粘贴以在ubuntu上获取puttygen:sudo apt-get install putty-tools
Lennart Rolland 2014年

“简单”-我不希望看到复杂!
亚历克斯·詹森


6

我认为(几年前)TCSgrad试图问的是如何使Linux像他的Windows计算机一样工作。也就是说,有一个代理(寻呼机)保存着私钥的解密副本,因此密码短语只需要放入一次即可。然后,ssh客户端putty可以登录到其公钥被列为“授权”的计算机,而无需输入密码提示。

类似的是Linux 作为ssh客户端,具有代理,该代理持有解密的私钥,因此,当TCSgrad键入“ ssh host”时,ssh命令将获取其私钥,而不会提示输入密码。主机当然必须在〜/ .ssh / authorized_keys中持有公钥。

使用ssh-agent(寻呼机模拟物)和ssh-add(向寻呼机添加私钥的模拟物)可以完成这种情况的Linux模拟。

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

现在,我们有一个运行选美的模拟,一个没有加载密钥的代理。

本身键入$ ssh-add将(默认情况下)添加〜/ .ssh中默认标识文件中列出的私钥。

可以在此处找到更多详细信息的网络文章


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.