尝试通过SSH进入Amazon Ec2实例-权限错误


745

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

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

这篇文章之后,我尝试将+600 pem文件修改为chmod,但是现在当我ssh时,我得到的是:

Permission denied (publickey).

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

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

2
当您使用错误的pem文件时也会出现此错误。
拉胡尔·普拉萨德

另外,还要确保在创建实例后创建实例,然后选择密钥对作为要使用的指定密钥。我反过来做了。
加里

我在Windows中使用WinSCP。有什么做chmod 400 myfile.pem,因为它使用myfile.ppk的的puttygen从PEM文件生成。
Chetabahana '16

当您未使用正确的用户登录时,也会发生此错误;)
andrea06590 '18

Answers:


1459

问题是文件上的mod错误。

执行即可轻松解决-

chmod 400 mykey.pem

取自亚马逊的指示-

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

400通过将其设为只读且仅对所有者开放来对其进行保护。


3
非常感谢!chmod 400会做什么?到mykey.pem?
哥斯达黎加

19
400通过将其设为只读且仅对所有者开放来对其进行保护。
Kof

1
之后,当我执行ssh -l USERNAME_HERE -i .ssh / yourkey.pem public-ec2-host时,我得到“警告:身份文件blabla.pem无法访问:没有这样的文件或目录”。
coolcool1994

3
此命令+ ssh -i YOUR_PEM_FILE.pem ec2-user@YOUR_IP解决了该问题。也许这应该是公认的答案...
c4k

1
我如何在Windows上运行相同的文件?
Ahsan Mukhtar

262

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

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

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

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

高温超导


30
或ssh -i key.pem ubuntu @ servername
jsh 2012年

43
错误消息说明了一切:.pem证书文件没有受到足够的保护。按照以下建议执行chmod 400 xyz.pem。
2012年

1
@allprog对我来说,这只会引起它说Permission denied (publickey).而已…………
Aram Kocharyan

1
我发现了问题-我没有使用与创建实例相同的密钥
Aram Kocharyan 2013年

12
这不是解决方案-默认情况下,对下载的密钥文件的文件许可权是844。应该是400 chmod 500 <path_to_pem_file>应该做到的。
伊拉德·梅达尔

62

我知道这对游戏来说很晚了...但是总是这样对我有用:

步骤1

ssh-add ~/.ssh/KEY_PAIR_NAME.pem

步骤2,只需在:)中使用ssh

ssh user_name@<instance public dns/ip>

例如

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

希望这对某人有帮助。


“ ssh-add”与将* .pem文件复制到〜/ .ssh文件夹相同吗?
アレックス

1
>>只是将* .pem文件复制到〜/ .ssh文件夹不一样,必须将其添加到文件夹,然后运行命令ssh-add。
2014年

游戏进行得很晚,但是需要澄清一下... 1.将.pem文件添加到〜/ .ssh目录(如有必要,请创建),2.使用ssh-add命令将身份添加到身份验证中代理 这意味着使用ssh时无需指定.pem文件
Ian Atkin 2014年

2
在ssh-add¬/ .ssh / key.pem之后; 收到错误无法打开与身份验证代理的连接。评估ssh-agent -s报告SSH_AGENT_PID = 3409; ssh-add给出与上述相同的错误.........这里的任何帮助plz
Tariq

哇,这对我将来与VPS的所有连接非常方便。谢谢队友:)
艾哈迈德·穆斯塔克

36

好吧,对我有用的唯一东西是:

  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


我找不到ec2-99地址。你能帮我么?
Adil Malik

1
chmod 400 mykey.pem使用ubuntu登录,如下所示:ssh -i mykey.pem ubuntu@SERVER.amazonaws.com
Gal Bracha

27

看一下这篇文章。您不使用公共DNS,而是使用以下形式

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

名称在AMI面板上可见的位置


为文章加油,非常有用!
马特·罗伯兹

较小的改进:尝试以root身份aws登录时会提示以下内容:“请以ec2-user用户而不是root用户身份登录。”
Andre Schweighofer 2012年

如何找出我的ec2-XXX-XXX-XXX-XXX.z-2.compute-1.amazonaws.com是什么?
アレックス

管理控制台> EC2>实例,然后选择您的实例。
renick

“ root @”是此答案中其他所有人所缺少的。您的帮助!那和chmod。
lordB8r 2014年


13

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

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


7

我知道这个问题已经回答了,但是对于所有尝试过的人来说,您仍然会遇到烦人的“权限被拒绝(公钥)”。尝试使用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
  ___|\___|___|

2
谢谢..尝试上述所有选项后,我仍然遇到错误。用sudo运行ssh对我有用。
Gursharan Singh

我想知道为什么我必须在sudo中运行它。我尝试使用chmod 400 xyz.pem,但没有帮助。
塞缪尔·多明格斯

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)

4

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

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

    chmod XXXX file/directory


3

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

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


3

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

  1. 获取首次创建EC2实例时生成的.pem。
  2. 由于PuTTY不会读取.pem,请使用PuttyGen转换.pem文件.ppk 。
  3. 打开PuTTY,然后输入您的主机名,即您的实例用户名+公共DNS(例如ubuntu@ec2-xxx-xxx-xxx-xxx.region.compute.amazonaws.com)。不是您的AWS账户用户名。
  4. 然后导航到Connection> SSH> Auth。然后添加您的.ppk文件。单击浏览,显示“用于身份验证的私钥文件”
  5. 单击“打开”,您应该能够立即建立连接。

我在Windows中使用PuTTY 0.66。


这可行,但是有没有办法直接从命令行使ssh连接工作呢?
Ariel

3

除了其他答案之外,这是我为了使其有效而进行的操作:

  • 如果还没有,请将密钥复制到.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(:


2

进行chmod 400 yourkeyfile.pem如果您的实例是Amazon linux,则将ssh -i yourkeyfile.pem ec2-user @ ip用于ubuntu ssh -i yourkeyfile.pem ubuntu @ ip用于centos ssh -i yourkeyfile.pem centos @ ip


2

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

  1. 您使用了错误的密钥。
  2. 您的密钥没有正确的权限。您需要将其更改为400。
  3. 您使用了错误的用户。Ubuntu映像具有用户ubuntu,Amazon的AMI为ec2-user,而debian映像具有rootadmin

2

对我来说,问题是我的.pem文件位于我的NTFS分区之一中。我将其移至我的linux分区(ext4)。

通过运行以下命令获得所需的权限:

chmod 400 my_file.pem

而且有效。


2

好吧,查看您的帖子描述,我觉得您犯了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


1

清单:

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

  2. 权限设置正确吗?(我的亚马逊品牌AMI可使用644,但是Red hat必须至少为600或400。不了解Ubuntu。)

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


1

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

sudo chmod 0600 myfile.pem

然后尝试ssh使其完美运行。

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

1

默认情况下,权限不允许使用pem密钥。您只需要更改权限:

chmod 400 xyz.pem

如果是ubuntu实例,则使用以下命令进行连接:

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


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


1

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

chmod 400 yourPrivateKey.pem

在此处输入图片说明


0

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

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

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

步骤2:变更权限

chmod 400 ~/.ssh/example.pem

第三步:运行以下命令

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

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

 vim ~/.bashrc

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

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

现在,重新启动系统并用于sshConnect连接服务器。


0

这只是aws pem密钥的权限问题。

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

chmod 400 pemkeyname.pem

如果您无权更改文件的权限,则可以使用sudo,如下所示。

sudo chmod 400 pemkeyname.pem

我希望这可以正常工作。


0

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

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

chmod 400 xyz.pem

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

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


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

0

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

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

ssh-rsa <key>

你最终粘贴

sh-rsa <key>

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

cat ~/.ssh/id_rsa.pub

仅在确定时,才执行后续步骤;尝试以详细模式(例如flag -v)ssh 可能会指出实际问题:

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

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

ssh-agent bash
ssh-add <private_key>

-1

对我来说,解决此问题的方法是将.pem文件移动到apps目录中。这么说fooapp是我的应用程序的名称。我直接把它放在那儿。


-2

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

您可以更改文件夹,然后重试。例如,您可以在常用(桌面,下载等)文件夹中进行实验。

我尝试了这种方法并工作


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.