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

我想使用我的亚马逊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上传/下载文件?

684575 次浏览

此错误消息表示您身份验证失败。

以下是导致这种情况的常见原因:

  1. 试着用错误的键连接。您确定这个实例正在使用这个对吗?
  2. 试图连接错误的用户名。ubuntu是基于ubuntu的AWS发行版的用户名,但在其他一些debian上,它是ec2-user(或admin,根据Bogdan Kulbida的回答)(也可以是rootfedora,见下文)
  3. 试图连接错误的主机。这是您要登录的主机吗?

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

关于2.,关于你应该使用哪个用户名的信息通常从AMI图像描述中缺乏。但你可以在AWS EC2文档中找到一些,4.点: http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstancesLinux.html < / p >

使用ssh命令连接到实例。您将指定私钥(.pem)文件和user_name@public_dns_name。对于Amazon Linux,用户名为ec2-user。对于RHEL5,用户名是root或ec2-user。对于Ubuntu,用户名为ubuntu。对于Fedora,用户名是fedoraec2-user。对于SUSE Linux操作系统,用户名为。否则,如果ec2-user和root不起作用,请与AMI提供程序进行检查。

最后,请注意还有许多其他原因导致身份验证失败。如果你想在SSH命令中添加-v选项并读取输出,SSH通常会非常明确地说明哪里出了问题,正如这个问题的许多其他答案所解释的那样。

我把sudo放在前面就解决了这个问题

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

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

chown wellington:wellington key.pem

在这种情况下,问题产生于密钥对丢失。关于这个:

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

你可以遵循以下步骤:

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

通常,请记住必须允许EC2实例接受入站SSH通信。

为此,您必须为EC2实例的Security Group创建一个特定的规则。

.

.
  1. 访问AWS管理控制台
  2. 打开EC2选项卡
  3. 实例列表中选择你感兴趣的实例
  4. 描述标签中检查你的实例正在使用的安全组的名称。
  5. 再次在描述标签中单击查看规则并检查您的安全组是否在端口22上有入站ssh流量规则
  6. 如果不是,在网络,安全 menù中选择安全组
  7. 选择你的实例使用的安全组,然后点击入站选项卡
  8. 在Inbound选项卡的左侧,可以创建一条SSH入方向流量规则:
    • 创建一个新规则: SSH
    • :你想访问实例的IP地址子网
    • 请注意:如果你想将无限制的访问授予你的实例,你可以指定0.0.0.0/0,尽管Amazon不建议这样做
    • 李< / ul > < / >
    • 单击添加规则,然后单击应用您的更改
    • 检查现在是否能够通过SSH连接到实例。

希望这能像帮助我一样帮助别人。

这就是我解决问题的方法

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

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

每次我启动一个实例,我都有拒绝显示的权限。我还没有验证这一点,但我的理论是,在我尝试ssh进入它之前,服务器还没有完全设置好。在尝试了几次被拒绝后,我等了几分钟,然后我就可以连接了。如果你遇到这个问题,我建议你等五分钟再试一次。

对于ubuntu 12.04 LTS微实例,我必须将用户名设置为选项

ssh -i pemfile.pem -l ubuntu dns

下面是一个可能产生此错误的令人沮丧的场景:

如果您从另一个实例(例如实例xyz)创建的AMI中导入一个新实例,那么新实例将只接受实例a使用的相同密钥。这是完全可以理解的,但它会令人困惑,因为在创建新实例的一步一步的过程中,您被要求选择或创建一个键(在最后一步),这将不起作用。

无论您创建或选择的键是什么,只有用于实例XYZ的键将被新实例接受。

试着用

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

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

这个问题可以通过下面的命令登录Ubuntu系统来解决:

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

我也为此挣扎了一段时间,直到我发现了以下几点:

eb ssh

当你从项目目录中使用它时,没问题,没问题,你就进入了

我挣扎着同样的权限拒绝错误显然是由于

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配置文件通过一个意外的全局设置重置主机,如下所示。第一行Host不应该是注释。

$ 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实例上复制)

以我自己为例,我做了以下事情:

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

我已经两次有正确的键和ssh命令行(我知道,因为我正在复制一个工作的Ubuntu 14.04实例),但就是不能ssh到一个新实例,即使在上面Wade Anderson建议的等待5分钟之后。

我必须摧毁并重新制造机器。这种情况已经发生过两次。因为一开始我进不去,我看不出有什么问题。

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

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

我在Windows中使用WinSCP . sh // a> . sh。它在文件资源管理器和PuTTY SSH Shell上都能很好地访问我的Amazon EC2-VPC Linux。它与chmod pem file没有任何关系,因为它使用myfile.ppk 转换通过< em > PuTTYgen < / em >pem文件

你必须检查以下几件事:

  1. 请确认您的IP地址是否正确
  2. 确保你使用了正确的密钥
  3. 确保你使用了正确的用户名,你可以尝试: 3.1. 管理 3.2. ec2-user 3.3. 李ubuntu < / >

我也遇到了同样的问题,在我把用户名改成ubuntu之后,问题就解决了。在AWS文档中提到了用户ec2-user,但不知何故不适合我。

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

key_load_private_type:拒绝权限是我得到的特定错误

<强>解决方案: Sudo chmod 644 <key.pem> < / p >

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

您需要执行以下步骤:

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

如果ubuntu用户不工作,则尝试使用ec2-user

当你尝试

ssh -i <pem path>root@ec2-public-dns < /代码> < / p >

你会得到一条消息,建议你使用ec2-user

请以“ec2-user”用户登录,而不是“root”用户。 < /代码> < / p >

所以使用

ssh -i <pem path>ec2-user@ec2-public-dns < /代码> < / p >

我也有同样的问题,这很奇怪。如果你相信你所做的一切都是好的,那么请遵循以下的原则: 有时会混淆EC2实例的用户!!有时你会得到ec2-user, ubuntu, centos等等。所以检查你的用户名的机器!!< / p >

以root用户登录 SSH -i你的密钥。Pem(400权限)root@< 它将抛出错误,并将提供可用的用户名。然后使用该用户登录。

这是一个基本的事情,但一定要确认您要登录哪个用户。我的情况只是为了分散注意力。我正在尝试使用用户:

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

但是另一个用户:

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

我犯了同样的错误,但情况不同。对我来说,在很长一段时间后,我可以成功地SSH到我的远程计算机。经过大量的搜索,我的问题的解决方案是文件权限。当然,这很奇怪,因为我没有改变任何权限在我的计算机或远程属于ssh的文件/目录。因此,从良好的archlinux维基中,它是:

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

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

对于远程机器,这样做:

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

在那之后,我的SSH开始重新工作,没有权限拒绝(公钥)的事情。

我可以从一台机器上SSH,但不能从另一台机器上SSH。原来我用错了私钥。

我解决这个问题的方法是从我的私钥中获取公钥,就像这样:

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

结果与EC2实例上~/.ssh/authorized_keys中的结果不匹配。

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

ssh-add - k

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

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

查看“使用说明”

上面的建议都很好,但我遇到的问题是我选择了一个预先制作好的实例。实例启动后,请查看使用说明。我错误地使用了私钥的登录id,而在指令中我应该使用“bitnami”(例如bitnami@domain -i key.pem)

上面所有排名靠前的答案都是准确的,应该适用于大多数情况。如果它们不像在我的情况下那样,我只是在我试图ssh的机器上摆脱了我的~/.ssh/known_hosts文件,这为我解决了问题。后来我和他联系上了。

我也犯过类似的错误

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

我的问题是,由于Advanced details:下的Step 3: Configure instance detail的run-on- startup脚本上的错误,实例没有正确启动

我心里想的是:

< p > <代码> # include
 https://xxxx/bootstrap.sh
< /代码> < / p >

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

#include

https://xxxx/bootstrap.sh

因此没有创建实例端的公钥

它是区分大小写的。

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

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