我在Amazon EC2上创建了一个新的linux实例,并下载了.pem文件以允许我SSH登录。

当我试图ssh与:

ssh -i myfile.pem <public dns>

我有:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for 'amazonec2.pem' are too open.
It is recommended that your private key files are NOT accessible by others.
This private key will be ignored.
bad permissions: ignore key: amazonec2.pem
Permission denied (publickey).

在这篇文章之后,我尝试chmod +600 .pem文件,但现在当我ssh时,我只是得到

Permission denied (publickey).

我犯了什么小学生的错误? pem文件在我的主文件夹中(在macOS中)。它的权限是这样的:

-rw-------@   1 mattroberts  staff    1696 19 Nov 11:20 amazonec2.pem

当前回答

除了其他答案之外,以下是我为了让它起作用所做的事情:

复制密钥到.ssh文件夹,如果你还没有:

cp的关键。pem ~ / . ssh / key.pem

给密钥适当的权限

Chmod 400 ~/.ssh/key.pem

启动ssh-agent(感谢https://stackoverflow.com/a/17848593)

Eval ssh-agent -s ssh-add

然后,添加密钥

ssh-add ~ / . ssh / key.pem

现在你应该能够ssh EC2 (:

其他回答

我知道现在已经很晚了……但这对我来说总是有效的:

# #第1步

ssh-add ~/.ssh/KEY_PAIR_NAME.pem

##第二步,简单地SSH在:)

ssh user_name@<instance public dns/ip>

e.g.

ssh ec2-user@ec2-198-51-100-1.compute-1.amazonaws.com

这个错误背后可能有三个原因。

你用错钥匙了。 您的密钥没有正确的权限。你需要chmod到400。 你用错用户了。Ubuntu映像有一个用户Ubuntu, Amazon的AMI是ec2-user, debian映像有root或admin

问题是文件上的权限集错误。

执行chmod 400 mykey.pem可以很容易地解决这个问题

此解决方案取自AWS说明:

要使SSH正常工作,密钥文件必须是不可公开的。chmod 400 mykey.pem

400通过使其仅为所有者只读来保护它。

您可能使用了错误的用户名登录,因为-

大多数Ubuntu映像都有一个用户Ubuntu 亚马逊的AMI是ec2-user 大多数Debian映像都有根或管理员

登录时,需要调整ssh命令:

ssh -l USERNAME_HERE -i .ssh/yourkey.pem public-ec2-host

在这个问题上,我喜欢做的一件事是使用别名并将其添加到.bashrc文件中,这样我就不必在每次需要SSh EC2实例时编写连接命令或返回密钥。

我是这样做的:

vim .bashrc

在文件末尾添加以下内容

# Custom fields

###[ MY APP 1 NAME ]###

# APP 1 Dev env EKS cluster bastion host
alias app1_dev="ssh -i ~/.ssh/app1-dev-bastion.pem USER@IPv4_ADDRESS"

###[ MY APP 2 NAME ]###
# APP 2 Stg env CodeDeploy instance
alias app_stg_cd="ssh -i ~/.ssh/app2-stg-cd.pem USER@IPv4_ADDRESS"

然后应用更改:

source .bashrc

如果之前有人回答了这个问题,而我没有注意到,我很抱歉,只是想分享一下我自己的工作品味,而不是像其他同事回答得不太好。