保护一个pem文件的密码

14
我想要使用有密码保护的pem文件登录我的EC2实例。如何给pem文件设密码?我之前做过这个,但是现在不记得是怎么做的了。我拿了一份由AWS生成的pem文件并运行了一些命令,它生成了一些类似于下面的东西:
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,<BlahBlahBlah>

<encrypted stuff is here>

-----END RSA PRIVATE KEY-----

当我通过SSH进入该服务器时,我需要指定我的受密码保护的pem文件,并在解密和SSH登录之前输入密码。
我找到了这篇文章:https://martin.kleppmann.com/2013/05/24/improving-security-of-ssh-private-keys.html,它告诉我使用以下命令:
ssh-keygen -t rsa -N 'super secret passphrase' -f test_rsa_key

但生成的加密文件(具有我所要寻找的正确标头)似乎无法正常工作。当我尝试使用加密的 pem 文件进行 ssh 时,会出现 "Permission denied (publickey)." 的错误提示。我能够使用未加密的 pem 文件 SSH 到该服务器。

2个回答

25

由于您使用的命令生成了一个新的密钥对,而不是保护您现有的私钥。

尝试使用ssh-keygen-p选项。

ssh-keygen -p -f my_private_key

它会提示您输入口令,并保护您的私钥。

Enter new passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved with the new passphrase.

如果您在ssh中使用my_private_key,它会提示输入密码并且会成功。

 -p      Requests changing the passphrase of a private key file instead of
         creating a new private key.  The program will prompt for the file
         containing the private key, for the old passphrase, and twice for
         the new passphrase.

太棒了,成功了!谢谢。有什么想法为什么我的来自一个区域的pem文件在另一个区域无法使用?我问过周围的人,似乎应该可以工作。我甚至选择了“使用已经存在的pem文件”,并且必须勾选框,表示是的,我有pem文件。 - LampShade
1
私钥不会在区域之间共享,除非您在所有区域中上传了相应的公钥。 - helloV
尽管他们给了我选择的选项,但是它们没有共享,可能是因为我错过了一些详细信息,说我需要上传公钥。当他们让我选择时,我假设我不需要这样做。 - LampShade
@LampShade,是什么让你有选择它的选项?你在AWS控制台里吗?密钥对是区域性的。如果你在us-west-1启动并在AWS控制台中使用EC2启动向导,则只会看到与us-west-1相关的密钥对。其他地区也是如此。 - jarmod
如果我有机会的话,我会给你发送一张截图。在设置 EC2 实例的最后,它会要求创建一个新的 pem 文件或选择一个已经存在的文件。即使在另一个区域,它也给了我选择已经存在的文件的选项(我在另一个区域创建的文件)。但是然后它就不起作用了...这很奇怪。 - LampShade

0

你可以安装并使用puttygen:

sudo apt install putty

为了生成受保护的密钥,请执行以下操作:

puttygen KEY_PAIR_PRIVATE.pem -O private-openssh -o KEY_PAIR_PRIVATE.key -P

-P选项是用于设置私钥的新密码。

附注:您可能需要设置权限以使用该密钥,例如:

sudo chmod 755 KEY_PAIR_PRIVATE.key

最后,您可以安全地访问您的 AWS 实例:

ssh -i KEY_PAIR_PRIVATE.key ubuntu@IP_EC2_INSTANCE_OR_HOSTNAME

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接