尝试SSH到Amazon Ec2实例 - 权限错误

时间:2011-11-19 11:35:09

标签: amazon-web-services authentication ssh amazon-ec2 permissions

对某些人来说,这可能是一个非常简单的问题:)

我已经在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).

关注this post我尝试chmod +600 pem文件,但现在当我ssh我得到:

Permission denied (publickey).

我在这里犯的男生错误是什么?  .pem文件位于我的主文件夹中(在osx中​​)。它的权限如下所示:

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

38 个答案:

答案 0 :(得分:1237)

问题是文件上有错误的mod。

通过执行 -

轻松解决

chmod 400 mykey.pem

取自亚马逊的指示 -

  

您的密钥文件不能公开查看以使SSH正常工作。用这个   命令如果需要:chmod 400 mykey.pem

答案 1 :(得分:251)

您可能使用错误的用户名登录:

  • 大多数Ubuntu图片都有一个用户ubuntu
  • 亚马逊的AMI是ec2-user
  • 大多数Debian图片都有rootadmin

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

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

HTH

答案 2 :(得分:56)

我知道游戏后期非常 ...但总是对我有用:

第1步

ssh-add ~/.ssh/KEY_PAIR_NAME.pem

第2步,只需ssh in:)

ssh user_name@<instance public dns/ip>

e.g。

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

希望这有助于某人。

答案 3 :(得分:37)

好的男人,唯一对我有用的是:

  1. 更改密钥的权限

      

    chmod 400 mykey.pem

  2. 确保使用 ec2-user 和正确的ec2-99 ...地址登录。当您登录并查看列出的实例时,ec2-99地址位于aws控制台的底部

      

    ssh -i mykey.pem ec2-user@ec2-99-99-99-99.compute-1.amazonaws.com

答案 4 :(得分:27)

看看this article。您不使用公共DNS,而是使用表单

ssh -i your.pem root@ec2-XXX-XXX-XXX-XXX.z-2.compute-1.amazonaws.com

其名称在AMI面板上可见

答案 5 :(得分:14)

使用以下命令更改密钥文件的权限:

chmod 400 key-file-name.pem

请参阅AWS文档以连接到实例:

http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EC2_GetStarted.html#EC2_ConnectToInstance_Linux

答案 6 :(得分:7)

在Windows中,您可以转到pem文件的属性,然后转到“安全性”选项卡,然后单击“前进”按钮。

删除继承和所有权限。然后授予自己完全的控制权。毕竟SSL不会再给您同样的错误。

答案 7 :(得分:6)

在Mac终端中,做“chmod 400 xyz.pem”没有帮助我,它一直说许可被拒绝。对于ubuntu用户,我建议

  1. ssh-add xyz.pem
  2. ssh -i xyz.pem ubuntu@ec2-54-69-172-118.us-west-2.compute.amazonaws.com(注意用户是ubuntu)

答案 8 :(得分:6)

我知道这个问题已经得到了回答,但对于那些已经尝试过这些问题的人来说,你仍然会得到令人讨厌的“Permission denied(publickey)”。尝试使用SUDO运行命令。当然这是一个临时解决方案,您应该正确设置权限,但至少可以让您确定当前用户没有以您需要的权限运行(如您所愿)

sudo ssh -i amazonec2.pem ec2-xxx-xxx-xxx-xxx.us-west-2.compute.amazonaws.com

执行此操作后,您将收到如下消息:

Please login as the user "ec2-user" rather than the user "root"

其中也有少量记录。在这种情况下,只需这样做:

sudo ssh -i amazonec2.pem ec2-xxx-xxx-xxx-xxx.us-west-2.compute.amazonaws.com -l ec2-user

你会得到光荣的:

   __|  __|_  )
   _|  (     /   Amazon Linux AMI
  ___|\___|___|

答案 9 :(得分:4)

SSH密钥和文件权限最佳做法:

  • .ssh目录 - 0700(仅限所有者)
  • 私钥/ .pem文件 - 0400(由所有者只读)
  • 公钥/ .pub文件 - 0600(仅由所有者读取和写入)

    chmod XXXX file/directory

答案 10 :(得分:3)

ssh -i /.pem user @ host-machine-IP

我认为这是因为您输入了错误的凭据 或者,您使用的是公钥而不是私钥 或者,您的端口权限对所有人打开ssh。这对亚马逊来说很糟糕。

答案 11 :(得分:3)

使用PuTTY替代登录。它很好,但需要几步。

  1. 获取首次制作EC2实例时生成的.pem。
  2. 使用PuttyGen转换.pem文件.ppk,因为PuTTY不读取.pem。
  3. 打开PuTTY并输入主机名,这是您的实例用户名+公共DNS(例如:ubuntu @ ec2-xxx-xxx-xxx-xxx.region.compute.amazonaws.com)。 不是您的AWS账户用户名。
  4. 然后导航至连接&gt; SSH&gt;验证即可。然后添加 .ppk 文件。单击浏览,其中显示“用于身份验证的私钥文件”
  5. 单击“打开”,您应该能够立即建立连接。
  6. 我在Windows中使用PuTTY 0.66。

答案 12 :(得分:2)

默认情况下,每当您下载密钥文件时,它都具有 644 权限。

因此您每次下载新密钥时都需要更改权限。

 chmod 400 my_file.pem

答案 13 :(得分:2)

我的问题是我的.pem文件位于我的一个NTFS分区中。我把它移到我的linux分区(ext4)。

通过运行来获得所需的权限:

chmod 400 my_file.pem

它有效。

答案 14 :(得分:2)

您可以从ASW指南中找到答案。 400通过将其设为只读且仅对所有者开放来对其进行保护。

chmod 400 mykey.pem

答案 15 :(得分:2)

在Windows中,

  • 右键单击pem文件。然后选择属性。
  • 选择安全选项卡->单击编辑->删除除当前用户外的所有其他用户
  • 再次返回“安全性”选项卡->单击“高级''->禁用继承

答案 16 :(得分:2)

此错误背后有三个原因。

  1. 您使用的是错误的密钥。
  2. 您的密钥没有正确的权限。你需要把它chmod到400。
  3. 您使用的是错误的用户。 Ubuntu图片有一个用户 ubuntu ,亚马逊的AMI是 ec2-user ,debian图片有 root admin < / LI>

答案 17 :(得分:2)

执行chmod 400 yourkeyfile.pem 如果你的实例是亚马逊linux,那么使用ssh -i yourkeyfile.pem ec2-user @ ip 对于ubuntu ssh -i yourkeyfile.pem ubuntu @ ip 为了centos ssh -i yourkeyfile.pem centos @ ip

答案 18 :(得分:2)

这对我来说是编辑默认的安全组,以允许端口22上的入站TCP通信:

enter image description here

答案 19 :(得分:1)

密钥文件不应公开可见,因此使用权限为400

chmod 400 keyfile.pem

如果以上命令显示权限错误,请使用

sudo chmod 400 keyfile.pem

现在ssh进入ec2机器,如果仍然遇到问题,请使用 ec2-user

ssh -i keyfile.pem ec2-user@ec2-12-34-56-78.compute-1.amazonaws.com

答案 20 :(得分:1)

好吧,看着您的帖子描述,我觉得您犯了2个错误:-

  1. 设置私钥的正确权限。 下面的命令应该可以帮助您设置正确的文件渗透率。

    chmod 0600 mykey.pem

  2. 您尝试登录的错误ec2用户

    查看您的调试日志,我认为您已经生成了一个Amazon Linux实例。该实例类型的默认用户为ec2-user。如果该实例将是ubuntu,那么您的默认用户将是ubuntu

    ssh -i privatekey.pem default_ssh_user@server_ip

Note:
   For an Amazon Linux AMI, the default user name is ec2-user.

   For a Centos AMI, the default user name is centos.

   For a Debian AMI, the default user name is admin or root.

   For a Fedora AMI, the default user name is ec2-user or fedora.

   For a RHEL AMI, the default user name is ec2-user or root.

   For a SUSE AMI, the default user name is ec2-user or root.

   For an Ubuntu AMI, the default user name is ubuntu.

   Otherwise, if ec2-user and root don't work, check with the AMI provider.

来源:https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstancesLinux.html

答案 21 :(得分:1)

.400通过将其设置为只读且仅供所有者使用来保护它。
您可以从ASW指南中找到答案。

chmod 400 yourPrivateKey.pem

enter image description here

答案 22 :(得分:1)

在 Windows 中,转到 .pem 文件,右键单击并选择属性

  • 转到安全标签中的高级

  • 禁用并删除继承。

  • 然后按添加并选择一个主体。

  • 将帐户用户名添加为对象名称,然后按确定。

  • 授予所有权限。

  • 应用并保存更改。

现在检查上面的命令

答案 23 :(得分:1)

除了其他答案之外,我还采取了以下措施:

  • 如果您还没有,请将密钥复制到.ssh文件夹:

cp key.pem ~/.ssh/key.pem

  • 为密钥
  • 授予适当的权限

chmod 400 ~/.ssh/key.pem

eval `ssh-agent -s` ssh-add

  • 然后,添加密钥

ssh-add ~/.ssh/key.pem

现在你应该能够ssh EC2(:

答案 24 :(得分:1)

默认权限不允许使用pem键。 您只需要更改权限:

chmod 400 xyz.pem

如果ubuntu实例然后使用:

连接

ssh -i xyz.pem ubuntu@ec2-youraws.amazonaws.com

答案 25 :(得分:1)

只需将pem文件的权限更改为0600,仅允许允许的用户使用,它将像魅力一样工作。

sudo chmod 0600 myfile.pem

然后尝试ssh它会完美运作。

ssh -i myfile.pem <<ssh_user>>@<<server>>

答案 26 :(得分:1)

清单:

  1. 您使用的是私钥.pem文件吗?

  2. 是否正确设置了权限? (我的亚马逊品牌AMI使用644,但红帽必须至少600或400.不知道Ubuntu。)

  3. 您是否在ssh系列中使用了正确的用户名?亚马逊品牌=“ec2-user”,Red Hat =“root”,Ubuntu =“ubuntu”。用户可以指定为“ssh -i pem usename @ hostname”或“ssh -l username -i pem hostname”

答案 27 :(得分:0)

您还应该检查您的 .pem 文件是否已损坏。我花了大约一个小时摸不着头脑,决定用这条线检查

openssl rsa -check -in test.pem -noout

如果它返回“RSA key ok”,那么你很好。如果没有,请确保您拥有正确的文件,或者出于任何原因正确复制它。

答案 28 :(得分:0)

请参阅在 AWS 上 ssh EC2 实例的说明。

enter image description here

然后,您可以在下面找到 No.3 这样的说法。

enter image description here

所以在这种情况下,只需运行:

chmod 400 myKey.pem

答案 29 :(得分:0)

如果您在使用 ubuntu 子系统的 Windows 10 上,并且如果您 sudo chmod 将密钥更改为 400,那么它可能仍然会出现“加载密钥 pem:权限被拒绝”的错误

ls -al 你会看到 root 现在拥有这个文件! chown 给你的登录用户,然后它就可以工作了。

答案 30 :(得分:0)

如果与您无关,请忽略此答案,但是根据我的经验,我看到人们对Permission denied (publickey)存有疑问,因为他们只是将公钥粘贴(在目标计算机上)而没有第一个字母

使用 vim 编辑(粘贴)密钥时会发生这种情况。由于默认情况下 vim 命令模式中打开(而不是在插入模式中),因此粘贴密钥而不切换到插入模式< / em>(即i)将导致跳过第一个s字母,例如代替

ssh-rsa <key>

您最终粘贴

sh-rsa <key>

因此,在尝试其他解决方案之前,请先参阅是否正确粘贴了密钥!即

cat ~/.ssh/id_rsa.pub

仅在确定的情况下,执行以下步骤;尝试以详细模式(即标志-v)进行SSH可能会提示您实际的问题:

ssh -v -i <private_key> <name>@<ip> -p <port>

请注意,正如其他人已经在这里提到的那样,在大多数情况下,启动一个空的 ssh代理(将密钥保存在内存中的程序)并添加密钥可以解决问题:

ssh-agent bash
ssh-add <private_key>

答案 31 :(得分:0)

您的密钥必须是公开可见的,SSH才能正常工作。如果需要,请使用以下命令:

chmod 400 Interview-apps.pem

Connect to your instance using its Public DNS:

ec2-**-***-***-***.us-west-2.compute.amazonaws.com

示例:

ssh -i "Interview-apps.pem" ec2-user@ec2-**-***-***-***.us-west-2.compute.amazonaws.com

答案 32 :(得分:0)

我已经看到了这个问题背后的两个原因

1)访问密钥没有正确的权限。具有默认权限的pem密钥不允许建立安全连接。您只需要更改权限:

chmod 400 xyz.pem

2)同时检查您是否已使用正确的用户凭据登录。否则,在连接时使用sudo

sudo ssh -i {keyfile} ec2-user @ {远程主机的IP地址}

答案 33 :(得分:0)

这只是你的aws pem键的许可问题。

使用以下命令将pem键的权限更改为400。

chmod 400 pemkeyname.pem

如果您无权更改文件的权限,可以使用sudo,如下面的命令。

sudo chmod 400 pemkeyname.pem

我希望这应该可以正常工作。

答案 34 :(得分:0)

以下是Linux用户使用.pem文件连接服务器的简单步骤:

步骤1:到pem文件的位置并将其复制到home .ssh位置。

cp example.pem ~/.ssh/example.pem

第2步:更改权限

chmod 400 ~/.ssh/example.pem

步骤3:运行以下命令

ssh -i ~/.ssh/example.pem ec2-user@host.com

由于此命令太长,因此您可以使用以下命令创建此别名:

 vim ~/.bashrc

最后以下列方式编写相同的命令。

alias sshConnect='ssh -i ~/.ssh/example.pem ec2-user@host.com'

现在重新启动系统并使用sshConnect连接您的服务器。

答案 35 :(得分:0)

解决这个问题的方法是将.pem文件移到apps目录中。 Soo说fooapp是我的应用程序的名称。我把它直接放在那里。

答案 36 :(得分:-1)

有时文件夹中可能有错误。我不知道为什么...

您可以更改文件夹,然后重试。例如,您可以尝试使用通常的文件夹(桌面,下载等)。

我尝试了这种方法并且有效

答案 37 :(得分:-2)

此错误仅是因为许可。

只需提供权限600

#chmod 600 pemfilepath