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

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

Permission denied (publickey). 

我已经创build了我的密钥对并下载了.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上传/下载文件?

此错误消息表示您未通过身份validation。

这些是常见的原因,可能会导致:

  1. 试图连接错误的关键。 你确定这个实例使用这个密钥对吗?
  2. 试图用错误的用户名连接。 ubuntu是基于ubuntu的AWS发行版的用户名,但在其他一些版本中,它是ec2-user (或者某些Debian的admin ,根据Bogdan Kulbida的回答)(也可以是rootfedora ,见下)
  3. 尝试连接错误的主机。 这是你正在尝试login到的正确的主机?

请注意,如果您在EC2实例上弄糟了/home/<username>/.ssh/authorized_keys文件,也会发生1. .。

关于2. ,AMI Image描述中常常缺less关于应使用哪个用户名的信息。 但是您可以在AWS EC2文档中find一些第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用户 。 对于SUSE Linux,用户名是root 。 否则,如果ec2-user和root不起作用,请咨询您的AMI提供商。

最后 ,请注意authentication失败的原因还有很多。 如果您关心在您的SSH命令中添加-v选项并读取输出,SSH通常会非常明确地指出发生了什么问题,正如许多其他对此问题的解答中所述。

在这种情况下,问题来自丢失的密钥对。 对这个:

  • 没有办法改变实例上的密钥对 。 您必须创build一个使用新密钥对的新实例。
  • 如果您的实例被Elastic Beanstalk上的应用程序使用,则可以解决该问题

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

  1. 访问AWSpipe理控制台
  2. 打开Elastic Beanstalk选项卡
  3. 所有应用程序选项卡中select你的应用
  4. 从左侧菜单中selectconfiguration
  5. 点击Instances Gear
  6. 服务器表单中检查EC2密钥对input并select新的密钥对。 您可能需要刷新列表才能看到刚刚创build的新密钥对。
  7. 保存
  8. Elastic Beanstalk将为您创build与新密钥对关联的新实例。

一般来说,请记住,您必须允许您的EC2实例接受入站SSH通信。

为此,您必须为您的EC2实例的安全组创build特定的规则。 你可以按照这些步骤。

  1. 访问AWSpipe理控制台
  2. 打开EC2选项卡
  3. 从“ 实例”列表中select您感兴趣的实例
  4. 在“ 描述”选项卡中 ,请input您的实例正在使用的安全组名称。
  5. 再次在描述选项卡上单击查看规则,并检查您的安全组是否有端口22上的入站sshstream量的规则
  6. 如果没有,请在Network&Security中select安全组
  7. select您的实例使用的安全组 ,然后单击入站选项卡
  8. 入站选项卡左侧可以组成SSH入站stream量的规则:
    • 创build一个新的规则 :SSH
    • 来源 :您想要访问实例的IP地址子网
    • 注意 :如果你想授予无限制访问你的实例,你可以指定0.0.0.0/0 ,尽pipe亚马逊不推荐这种做法
  9. 点击添加规则 ,然后应用您的更改
  10. 检查您现在是否可以通过SSH连接到您的实例。

希望这可以帮助别人帮助我。

这就是我解决问题的方法

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

我解决了问题,只是把sudo之前

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

但正确的解决办法是先改变所有权,然后像Janus Troelsen所说的那样作为普通用户进行连接。 就我而言,这将是:

 chown wellington:wellington key.pem 

尝试使用

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

要么

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

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

当用户的主目录是可写组时 ,用户不能login。

(在Ubuntu实例上转载)

您需要执行以下步骤:

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

如果ubuntu用户不工作,然后尝试与ec2-user

对于Ubuntu 12.04 lts微型实例,我不得不将用户名设置为选项

 ssh -i pemfile.pem -l ubuntu dns 

另外对于一些Debian操作系统,用户名是admin 。 至less对于6.5和7.0版本。

我同样拒绝许可的错误,显然是由于这个错误

 key_parse_private2: missing begin marker 

在我的情况下,原因是当前用户的sshconfiguration文件(〜/ .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 

很多debugging线在这里被切断

 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. 

上面的第三行是确定问题的地方; 然而,我从底部(上面)四条线查找debugging消息,并被误导。 关键没有问题,但我testing了它并比较了其他configuration。

我的用户sshconfiguration文件通过一个意外的全局设置来重置主机,如下所示。 第一个主机行不应该是一个评论。

 $ 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 

我希望别人认为这有帮助。

在连接我的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 

这发生在我身上多次。 我已经使用了免费层的Amazon Linux AMI 2013.09.2和Ubuntu Server 12.04.3 LTS。

每次我启动一个实例,我都有权限拒绝显示。 我没有证实这一点,但我的理论是,服务器并没有完全build立之前,我试图进入它。 经过几次拒绝许可的尝试之后,我等了几分钟,然后就可以连接了。 如果你有这个问题,我build议等待五分钟,然后再试一次。

这是一个可能令人沮丧的情况,产生这个错误:

如果您正在从另一个实例(例如xyz实例)创build的AMI中启动新实例,则新实例将只接受实例A使用的相同密钥。 这是完全可以理解的,但是会让人感到困惑,因为在创build新实例的一步一步的过程中,会要求您select或创build一个无效的密钥(在最后一步)。

无论您创build或select的密钥如何,只有您用于XYZ实例的密钥才会被新实例接受。

我也苦苦挣扎了一段时间,直到find以下内容:

 eb ssh 

当你从项目目录中使用它时,宾果游戏没有麻烦,你在

在我自己的情况下,我做了以下几点:

 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". 

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

这个问题可以通过使用以下命令login到Ubuntu框来解决:

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

我有两次键和ssh命令行正确(我知道,因为我复制了一个工作的Ubuntu 14.04实例),但只是没有能够ssh到一个新的实例,即使在等待5分钟,如上面的韦德安德森build议。

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

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

你必须检查这几件事情:

  1. 确保你的IP地址是正确的
  2. 确保你使用的是正确的密钥
  3. 确保你使用的是正确的用户名,你可以试试:3.1。 pipe理员3.2。 ec2-user 3.3。 Ubuntu的

我有同样的问题,并在我更改用户名到Ubuntu后解决。 在AWS文档被提到用户ec2用户,但不知何故不适合我。

我的私钥被设置为权限400 ,并导致权限被拒绝设置为'644'帮助我。

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

解决scheme: Sudo chmod 644 <key.pem>

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

当你尝试做

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

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

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

所以使用

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

我有同样的问题,它很奇怪。 如果您认为自己所做的一切都不如以下:有时EC2实例的用户会感到困惑! 有时候你会得到ec2-user,ubuntu,centos等等。所以请检查你的用户名为machie!

用root用户 ssh -i yourkey.pem (400 permission) root@<ip> 它会抛出错误,会给你可用的用户名 。 然后用该用户login。

这是一个基本的东西,但总是确认你正在尝试login的用户。 我的情况只是一个分心 。 我正在尝试使用root用户:

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

但是另一个用户

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

我有同样的错误,但不同的情况。 对我来说,经过很长一段时间之后,我突然发现,我可以成功地将SSH连接到远程计算机。 经过大量的search解决scheme,我的问题在哪里文件的权限。 这很奇怪,因为我没有改变我的电脑或属于ssh的文件/目录的远程的权限。 所以从这个好的archlinux维基在这里是:

对于本地机器来说这样做:

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

对于远程机器来说:

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

之后,我的SSH再次开始工作,没有许可被拒绝(publickey)的事情。

同样的事情发生在我身上,但是所发生的一切就是私钥在我本地机器上的钥匙串中丢失了。

ssh-add -K

重新添encryption钥,然后通过ssh命令连接返回工作。

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

我想通过从我的私钥中获取公钥的方式如下:

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

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