我使用 PuTTYgen 生成了密钥对并使用 Pageant 登录,因此我只需在系统启动时输入一次密码。
我如何在 Linux 中实现这一点?我听说过,keychain
但我听说它使用不同的密钥对格式——我不想更改我的 Windows 密钥,如果我可以在 Windows 和 Linux 中以相同的方式无缝连接会很好。
puttygen
支持将您的私钥导出为 OpenSSH 兼容格式。然后,您可以使用 OpenSSH 工具重新创建公钥。
Conversions->Export OpenSSH
并导出您的私钥~/.ssh/id_dsa
(或id_rsa
)。使用创建 RFC 4716 版本的公钥ssh-keygen
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
如果您拥有的只是来自用户的 PuTTY 样式格式的公钥,您可以将其转换为标准的 openssh 格式,如下所示:
ssh-keygen -i -f keyfile.pub > newkeyfile.pub
我一直忘记这个,所以我要在这里写。非极客,继续走。
在 Windows 上制作密钥的最常见方法是使用 Putty/Puttygen。Puttygen 提供了一个简洁的实用程序来将 linux 私钥转换为 Putty 格式。但是,没有解决的是,当您使用 puttygen 保存公钥时,它将无法在 linux 服务器上运行。Windows 将一些数据放在不同的区域并添加换行符。
解决方案:当您进入在 puttygen 中创建密钥对的公钥屏幕时,复制公钥并将其粘贴到扩展名为 .pub 的文本文件中。阅读这样的帖子,您将节省系统管理员数小时的挫败感。
但是,系统管理员,您总是会得到一个不稳定的密钥文件,该文件不会在身份验证日志中引发任何错误消息,除非找不到密钥,尝试密码;即使其他人的密钥都可以正常工作,并且您已将此密钥发送回用户 15 次。
ssh-keygen -i -f keyfile.pub > newkeyfile.pub
应该将现有的 puttygen 公钥转换为 OpenSSH 格式。
较新版本的PuTTYgen(我的是 0.64)能够在文件中显示要粘贴到 linux 系统中的 OpenSSH 公钥.ssh/authorized_keys
,如下图所示:
或者,如果您想从 PuTTY 格式的密钥文件中获取私钥和公钥,您可以puttygen
在 *nix 系统上使用。对于大多数基于 apt 的系统puttygen
来说,它是putty-tools
软件包的一部分。
从 PuTTY 格式的密钥文件中输出私钥:
$ puttygen keyfile.pem -O private-openssh -o avdev.pvk
对于公钥:
$ puttygen keyfile.pem -L
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
我最近在从 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 拥有的所有文件的工作。如果它找到带有密码的密钥,它将停止并首先询问该密钥的密码,然后继续。
在 linux 下创建密钥并使用 PuTTYgen 将密钥转换为 PuTTY 格式可能更容易。
我认为 TCSgrad 试图问的(几年前)是如何让 Linux 像他的 Windows 机器一样运行。也就是说,有一个代理(选美)持有私钥的解密副本,因此密码只需要输入一次。然后,ssh 客户端 putty 可以在没有密码提示的情况下登录到其公钥被列为“已授权”的机器。
与此类似的是,充当 ssh 客户端的Linux有一个代理持有解密的私钥,因此当 TCSgrad 键入“ssh host”时,ssh 命令将获取他的私钥并在不提示输入密码的情况下运行。当然,主机必须将公钥保存在 ~/.ssh/authorized_keys 中。
该场景的 Linux 模拟是使用 ssh-agent(选美模拟)和 ssh-add(将私钥添加到选美的模拟)来完成的。
对我有用的方法是使用: $ ssh-agent $SHELL $SHELL 是我需要让代理运行并保持运行的魔术。我在网上的某个地方发现了它,它在我的头撞到墙上几个小时后结束了。
现在我们有一个模拟选美运行,一个没有加载键的代理。
自己键入 $ ssh-add 将添加(默认情况下)在 ~/.ssh 的默认身份文件中列出的私钥。
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
甚至比重新打开 puttygen 还要快,我经常做的是: