SSH访问Amazon EC2实例时权限被拒绝(publickey)

时间:2013-08-31 18:36:19

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

我想使用我的Amazon ec2实例,但遇到以下错误:

Permission denied (publickey).

我创建了密钥对并下载了 .pem 文件。

鉴于:

chmod  600 pem file.

然后,这个命令

ssh -i /home/kashif/serverkey.pem  ubuntu@ec2-54-227-242-179.compute-1.amazonaws.com

但是有这个错误:

Permission denied (publickey)

另外,如何连接filezilla上传/下载文件?

29 个答案:

答案 0 :(得分:589)

此错误消息表示您无法进行身份验证。

这些是造成这种情况的常见原因:

  1. 尝试连接错误的密钥。你确定这个实例正在使用这个密钥对吗?
  2. 尝试使用错误的用户名进行连接。 ubuntu是基于ubuntu的AWS发行版的用户名,但根据Bogdan Kulbida的回答,在其他一些发行版上ec2-user(或admin对某些Debian来说)(也可以是root },fedora,见下文)
  3. 尝试连接错误的主机。这是您尝试登录的正确主机吗?
  4. 请注意,如果您弄乱了EC2实例上的1.文件,也会发生/home/<username>/.ssh/authorized_keys

    关于2.,有关您应该使用哪个用户名的信息通常缺少AMI图像说明。但是您可以在AWS EC2文档中找到一些项目,项目符号4.http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstancesLinux.html

      

    使用ssh命令连接到实例。您将指定私钥(.pem)文件和user_name @ public_dns_name。对于Amazon Linux,用户名为ec2-user。对于RHEL5,用户名为root或 ec2-user 。对于Ubuntu,用户名为 ubuntu 。对于Fedora,用户名是 fedora ec2-user 。对于SUSE Linux,用户名为 root 。否则,如果ec2-user和root不起作用,请咨询您的AMI提供商。

    最后,请注意,身份验证失败还有很多其他原因。如果您需要将-v选项添加到SSH命令并读取输出,SSH通常会明确指出出现了什么问题,正如此问题的许多其他答案中所解释的那样。

答案 1 :(得分:48)

在这种情况下,问题是由丢失密钥对引起的。关于这个:

  • 无法更改实例上的密钥对。您必须创建一个使用新密钥对的新实例。
  • 如果 Elastic Beanstalk 上的应用程序使用了您的实例,则可以解决此问题

您可以按照以下步骤操作:

  1. 访问 AWS管理控制台
  2. 打开 Elastic Beanstalk 标签
  3. 所有应用标签
  4. 中选择您的应用
  5. 从左侧选择配置
  6. 点击实例齿轮
  7. 服务器表单中,检查 EC2密钥对输入并选择新的密钥对。您可能必须刷新列表才能看到刚刚创建的新密钥对。
  8. 保存
  9. Elastic Beanstalk将为您创建与新密钥对关联的新实例。

  10. 通常,请记住您必须允许EC2实例接受入站SSH流量。

    为此,您必须为EC2实例的安全组创建特定规则。 您可以按照以下步骤操作。

    1. 访问 AWS管理控制台
    2. 打开 EC2标签
    3. 实例列表中选择您感兴趣的实例
    4. 说明标签中,您的实例正在使用安全组的名称。
    5. 再次在说明标签中点击查看规则,然后检查您的安全组是否在端口22上有入站ssh流量规则
    6. 如果没有,请网络&amp;安全性menù选择安全组
    7. 选择您的实例使用的安全组,然后点击入站标签
    8. 在“入站”选项卡的左侧,您可以为SSH入站流量组成规则:
      • 创建新规则:SSH
      • 来源 IP地址子网,您希望从中访问实例
      • 注意:如果您希望向您的实例授予无限制访问权限,您可以指定 0.0.0.0/0 ,但亚马逊不推荐此做法
    9. 点击添加规则,然后点击应用您的更改
    10. 检查您现在是否能够通过SSH连接到您的实例。
    11. 希望这可以帮助有人帮助我。

答案 2 :(得分:43)

这就是我解决问题的方法

ssh -i <key> ec2-user@<ec2 ip>

答案 3 :(得分:26)

我解决了问题,只是将sudo放在

之前
sudo ssh -i mykey.pem myec2.amazonaws.com

但正确的解决方案是首先更改所有权,然后像Janus Troelsen所说的那样以普通用户身份进行连接。在我的情况下,它将是:

chown wellington:wellington key.pem

答案 4 :(得分:23)

尝试使用

sudo ssh -i mykey.pem ubuntu@<ec2_ip_public_dns>

OR

sudo ssh -i mykey.pem ec2-user@<ec2_ip_public_dns>

答案 5 :(得分:22)

此错误的另一个可能原因:

当用户的主目录是可写组时,用户无法登录。

(在Ubuntu实例上转载。)

答案 6 :(得分:7)

您需要执行以下步骤:

  1. 如果您使用的是Linux,请打开您的ssh客户端或终端。
  2. 找到您的私钥文件并更改目录。
        cd <path to your .pem file>
  3. 执行以下命令:
    chmod 400 <filename>.pem
    ssh -i <filename>.pem ubuntu@<ipaddress.com>
  4. 如果ubuntu用户无效,请尝试使用ec2-user

答案 7 :(得分:7)

对于ubuntu 12.04 lts micro实例我必须将用户名设置为选项

ssh -i pemfile.pem -l ubuntu dns

答案 8 :(得分:5)

由于

,我在同样的权限被拒绝错误中挣扎
key_parse_private2: missing begin marker 

在我的情况下,原因是当前用户的ssh配置文件(〜/ .ssh / config)。

使用以下内容:

ssh -i ~/myKey.pem ec2-user@<IP address> -v 'exit'

初始输出显示:

debug1: Reading configuration data /home/ec2-user/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 56: Applying options for *
debug1: Hostname has changed; re-reading configuration
debug1: Reading configuration data /home/ec2-user/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config

......许多调试线在这里切割......

debug1: Next authentication method: publickey
debug1: Trying private key: /home/ec2-user/somekey.pem
debug1: key_parse_private2: missing begin marker
debug1: read PEM private key done: type RSA
debug1: Authentications that can continue: publickey
debug1: No more authentication methods to try.

上面的第三行是确定问题的实际情况;但是,我在调试消息中查找了从底部开始的四行(上图)并被误导了。密钥没有问题,但我测试了它并比较了其他配置。

我的用户ssh配置文件通过非预期的全局设置重置主机,如下所示。第一个主机行不应该是评论。

$ cat config
StrictHostKeyChecking=no
#Host myAlias
        user ec2-user
        Hostname bitbucket.org
#        IdentityFile ~/.ssh/somekey
#        IdentitiesOnly yes

Host my2ndAlias
        user myOtherUser
        Hostname bitbucket.org
        IdentityFile ~/.ssh/my2ndKey
        IdentitiesOnly yes

我希望其他人觉得这很有帮助。

答案 9 :(得分:4)

我忘了在连接我的Ubuntu实例时添加用户名(ubuntu)。所以我尝试了这个:

ssh -i /path/my-key-pair.pem my-ec2-instance.amazonaws.com

并且正确的方法是

ssh -i /path/my-key-pair.pem ubuntu@my-ec2-instance.amazonaws.com

答案 10 :(得分:3)

这发生在我身上多次。我使用的是Amazon Linux AMI 2013.09.2和Ubuntu Server 12.04.3 LTS,它们都是免费的。

每次我发布一个实例时,我都会被拒绝显示。我还没有验证这一点,但我的理论是在尝试ssh之前服务器没有完全设置。经过几次尝试拒绝许可后,我等了几分钟然后我才能连接。如果你遇到这个问题我建议等五分钟再试一次。

答案 11 :(得分:2)

我一直在努力,直到找到以下内容:

eb ssh

当你从项目目录中使用它时,bingo-bango没有大惊小怪,你在

答案 12 :(得分:2)

就我个人而言,我做了以下事情:

chmod 400 <key.pem>

ssh -i <key.pem> ec2-user@ec2_public_dns (for debian)

我最初使用的是root@部分,我得到了这个提示:

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

答案 13 :(得分:2)

同样的事情发生在我身上,但所有发生的事情都是私钥从我本地机器的钥匙串上丢失了。

  

ssh-add -K

重新添加密钥,然后连接的ssh命令恢复工作。

答案 14 :(得分:2)

以下是可能导致此错误的令人沮丧的情况:

如果您正在从另一个实例(例如实例xyz)创建的AMI中获取新实例,则新实例将只接受实例A使用的相同密钥。这是完全可以理解的,但它会让人感到困惑,因为在创建新实例的逐步过程中,系统会要求您选择或创建一个不起作用的密钥(在最后一步)。

无论您创建或选择的密钥是什么,新实例都只接受您用于实例XYZ的密钥。

答案 15 :(得分:2)

我在Windows中使用 WinSCP 。它在文件资源管理器和PuTTY SSH Shell上运行良好,可以访问我的Amazon EC2-VPC Linux。与chmod pem file无关,因为它使用来自 pem文件converted myfile.ppk PuTTYgen

答案 16 :(得分:1)

使用以下命令登录Ubuntu框可以解决此问题:

ssh -i ec2key.pem ubuntu@ec2-public-IP

答案 17 :(得分:1)

我有同样的错误,但情况不同。对我来说,经过很长一段时间我可以成功地将我的远程计算机发送到那里。经过大量搜索后我的问题的解决方案是文件权限。当然很奇怪,因为我没有更改我的计算机或属于ssh文件/目录的远程权限。所以从这里的好archlinux wiki来看:

对于本地机器,请执行以下操作:

$ chmod 700 ~/
$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/id_ecdsa

对于远程机器,请执行以下操作:

$ chmod 700 ~/
$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/authorized_keys

之后我的ssh在没有被拒绝(publickey)的情况下再次开始工作。

答案 18 :(得分:1)

这是一个基本的事情,但始终确认您尝试登录的用户。我的情况只是一个分心。我正在尝试使用 root 用户:

ssh -i ~/keys/<key_name> root@111.111.111.111

其他用户

ssh -i ~/keys/<key_name> dedeco@111.111.111.111

答案 19 :(得分:1)

我有同样的问题而且非常奇怪。如果你认为你做得很好而不是遵循这个: 有时候EC2实例的用户会感到困惑!!有时候你会得到ec2-user,ubuntu,centos等。所以检查你的用户名是否有机会!!

以root用户身份登录 ssh -i yourkey.pem (400 permission) root@<ip> 会抛出错误,并会为您提供可用的用户名。然后使用该用户登录。

答案 20 :(得分:1)

当您尝试

ssh -i <.pem path> root@ec2-public-dns

您收到一条消息,建议您使用ec2-user

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

所以使用

ssh -i <.pem path> ec2-user@ec2-public-dns

答案 21 :(得分:1)

我的私钥设置为权限5,导致权限被拒绝将其设置为'644'帮助了我。

key_load_private_type:权限被拒绝是我遇到的具体错误

<强>解决方案: 400

注意:设置为644是必须的,它不适用于400

答案 22 :(得分:1)

你必须检查以下几点:

  1. 确保您的IP地址正确
  2. 确保使用正确的密钥
  3. 确保使用正确的用户名,您可以尝试: 3.1。管理 3.2。 EC2用户 3.3。 ubuntu的
  4. 我遇到了同样的问题,我将用户名更改为ubuntu后解决了问题。在AWS文档中提到了用户ec2-user但不知何故对我不起作用。

答案 23 :(得分:1)

我已经两次拥有密钥和ssh命令行正确(我知道因为我正在复制正在运行的Ubuntu 14.04实例),但是即使在按照Wade的建议等待5分钟后也无法进入新实例安德森上面。

我必须销毁并重新创建机器。这发生在两个不同的场合。由于我最初无法进入,我看不出有什么问题。

所以,如果你有这个问题,试试吧。

答案 24 :(得分:0)

另一个可能的问题:登录ID错误

检查&#39;使用说明&#39;

上面所有好的建议,但我遇到的是我选择了一个预先制作的实例。实例启动后,请查看使用说明。我在错误地使用私钥的登录ID时,我应该使用&bit;比特纳&#39; bitnami&#39; (例如bitnami @ domain -i key.pem)

答案 25 :(得分:0)

我有类似的错误

debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Trying private key: xxxx.pem
debug1: Authentications that can continue: publickey
debug1: No more authentication methods to try.
Permission denied (publickey).

我的问题是,由于Step 3: Configure instance detailAdvanced details:下的{8}的运行启动脚本出错,实例无法正常启动

我以为我输入了什么:

#include
 https://xxxx/bootstrap.sh


实际输入内容会破坏实例设置

#include

https://xxxx/bootstrap.sh

因此,未创建实例端的公钥

答案 26 :(得分:0)

它区分大小写。

错误:SSH EC2-user @ XXX.XX.XX.XX -i MyEC2KeyPair.pem

正确:SSH ec2-user @XXX.XX.XX.XX -i MyEC2KeyPair.pem

答案 27 :(得分:-1)

我能够从一台机器上SSH,但不能从另一台机器上SSH。结果我使用了错误的私钥。

我解决这个问题的方法是从我的私钥获取公钥,如下所示:

ssh-keygen -y -f ./myprivatekey.pem

出现的内容与EC2实例中~/.ssh/authorized_keys的内容不匹配。

答案 28 :(得分:-1)

以上所有排名靠前的答案都是准确的,适用于大多数情况。如果他们不像我的情况那样,我只是在我试图ssh的机器上摆脱我的~/.ssh/known_hosts文件,这解决了我的问题。之后我能够连接。