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

TCS*_*rad 446 git putty keychain ssh-keys pageant

我使用PuTTYgen生成密钥对并使用Pageant登录,因此我必须在系统启动时输入一次密码短语.

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

Kal*_*son 692

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
    
    Run Code Online (Sandbox Code Playgroud)
  7. 将RFC 4716版本的公钥转换为OpenSSH格式:

    ssh-keygen -i -f ~/.ssh/id_dsa_com.pub > ~/.ssh/id_dsa.pub
    
    Run Code Online (Sandbox Code Playgroud)

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

  • 你的意思是**chmod 600 id_rsa**.该文件不需要是可执行的.:) (74认同)
  • 我认为这是新的东西,但是如果你在puttygen中打开你的私钥,它会自动在UI中显示一个OpenSSH兼容,可复制的公钥字符串. (19认同)
  • 对于那些得到"需要你的私钥文件不被其他人访问"的错误,比如我运行了`cd~/.ssh`和`chmod 700 id_rsa` (11认同)
  • 这个答案是使用无密码密钥从Windows命令行获取ssh的关键(特别是对于git访问).如果我早点看到它,本来可以节省我*小时的痛苦!谢谢! (2认同)
  • 可以从CLI执行puttygen吗? (2认同)

buk*_*zor 153

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

ssh-keygen -i -f keyfile.pub > newkeyfile.pub
Run Code Online (Sandbox Code Playgroud)

参考

文章副本

我一直忘了这个,所以我要在这里写.非极客,只是继续走路.

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

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

但是,系统管理员,你总是得到一个不会在auth日志中抛出错误消息的密钥文件,除了找不到密钥,尝试密码; 即使其他人的钥匙工作正常,你已经将这个钥匙发回给用户15次.

ssh-keygen -i -f keyfile.pub > newkeyfile.pub
Run Code Online (Sandbox Code Playgroud)

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

  • 这给了我一个错误:`decode blob failed: invalid format` (3认同)
  • 此外,您可能希望从"Comment:"行复制用户的注释,并将其粘贴到与新键相同的行上,并用空格分隔.我不知道为什么ssh-keygen默认不会这样做. (2认同)

Zac*_*Zac 139

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

在此输入图像描述

  • 是的!这最终是最快最简单的方式:) (12认同)
  • 这个答案涵盖了如何在使用OpenSSH格式的遥控器上设置密钥验证.但是为了在Linux*客户端*上使用Putty生成的密钥,这个答案是不够的.我按照接受的答案进行了精彩的工作. (7认同)
  • 这应该是现在最好的答案. (6认同)

小智 49

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

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

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

对于公钥:

$ puttygen keyfile.pem -L

  • OSX:`brew install putty` (2认同)

小智 23

sudo apt-get install putty
Run Code Online (Sandbox Code Playgroud)

这将自动安装puttygen工具.

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

puttygen mykey.ppk -O private-openssh -o my-openssh-key
Run Code Online (Sandbox Code Playgroud)

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

ssh -v user@example.com -i my-openssh-key
Run Code Online (Sandbox Code Playgroud)

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


jfr*_*k53 14

我最近遇到了这个问题,因为我正在从Putty for Linux迁移到Remmina for Linux.所以我在我的.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;
Run Code Online (Sandbox Code Playgroud)

很快就到了这一点,为putty所有的文件完成了工作.如果找到带密码的密钥,它将停止并首先询问该密钥的密码,然后继续.

  • 对于像我这样的懒人ppl,这里是复制粘贴,以便在ubuntu上获取puttygen:sudo apt-get install putty-tools (2认同)

Bra*_*der 8

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

腻子常见问题:A.2.2

  • 不幸的是,如果您必须使用现有密钥,则不能选择它. (14认同)

kov*_*sbv 6

我想TCSgrad试图问的问题(几年前)是如何使Linux的行为与他的Windows机器一样.也就是说,存在代理(选美),其保存私钥的解密副本,使得密码只需要被放入一次.然后,ssh客户端putty可以登录到其公钥被列为"已授权"而没有密码提示的计算机.

这样做的模拟是,作为ssh客户端的 Linux 有一个持有解密私钥的代理,这样当TCSgrad键入"ssh host"时,ssh命令将获取他的私钥并且不会被提示输入密码.当然,主机必须在〜/ .ssh/authorized_keys中保存公钥.

这个场景的Linux模拟是使用ssh-agent(选美模拟)和ssh-add(模拟为加入寻呼的私钥)完成的.

对我有用的方法是使用:$ ssh-agent $ SHELL $ SHELL是我需要让代理运行并保持运行的神奇技巧.我发现在网上的某个地方,它结束了几个小时的撞击我的头撞墙.

现在我们有了pageant的模拟运行,没有加载密钥的代理.

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

可以在此处找到包含更多详细信息的Web文章