我在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

当前回答

您需要在密钥文件(myfile.pem)上设置一些保守的权限。 试着把它改成r-------- 或400

其他回答

在windows中,

右键单击pem文件。然后选择属性。 选择安全选项卡——>单击“高级”按钮——>禁用继承——>删除该对象的所有继承权限 点击“添加”按钮——>选择主体——>在输入框中输入用户名——>点击“检查名称”按钮——>点击“确定”——>点击“确定”——>点击“确定”——>点击“确定”

在这个问题上,我喜欢做的一件事是使用别名并将其添加到.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

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

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

# #第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

如果没有权限别忘了sudo。 Sudo SSH -i myfile。pem < < ssh_user > > @ < >

SSH密钥和文件权限最佳实践:

.ssh目录- 0700(仅所有者) 私钥/。Pem文件- 0400(仅由所有者读取) 公钥/。Pub文件- 0600(仅由所有者读写) chmod XXXX文件/目录