355

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

4

29 回答 29

589

此错误消息表示您未能进行身份验证。

这些是可能导致这种情况的常见原因:

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

请注意,如果您弄乱了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,用户名是fedoraec2-user。对于 SUSE Linux,用户名为root。否则,如果 ec2-user 和 root 不起作用,请咨询您的 AMI 提供商。

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

于 2013-08-31T21:11:08.003 回答
48

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

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

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

  1. 访问AWS 管理控制台
  2. 打开Elastic Beanstalk选项卡
  3. 从所有应用程序选项卡中选择您的应用程序
  4. 从左侧菜单中选择配置
  5. 单击实例齿轮
  6. 服务器表单中检查EC2 密钥对输入并选择您的新密钥对。您可能需要刷新列表才能看到刚刚创建的新密钥对。
  7. 节省
  8. Elastic Beanstalk 将为您创建与新密钥对关联的新实例。

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

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

  1. 访问AWS 管理控制台
  2. 打开EC2 选项卡
  3. 实例列表中选择您感兴趣的实例
  4. 描述选项卡中检查您的实例正在使用的安全组的名称。
  5. 再次在描述选项卡中单击查看规则并检查您的安全组是否有端口 22 上的入站 ssh 流量规则
  6. 如果没有,在网络和安全菜单中选择安全组
  7. 选择您的实例使用的安全组,然后单击入站选项卡
  8. 在 Inbound 选项卡的左侧,您可以为 SSH 入站流量编写规则:
    • 创建新规则:SSH
    • 来源:您要从中访问实例的IP 地址子网
    • 注意:如果您想授予对您的实例的无限制访问权限,您可以指定0.0.0.0/0,尽管亚马逊不推荐这种做法
  9. 单击添加规则,然后应用您的更改
  10. 检查您现在是否能够通过 SSH 连接到您的实例。

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

于 2013-12-12T07:51:55.843 回答
43

这就是我解决问题的方法

ssh -i <key> ec2-user@<ec2 ip>
于 2013-12-23T01:49:03.467 回答
26

我解决了sudo之前提出的问题

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

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

chown wellington:wellington key.pem
于 2013-11-24T14:05:58.770 回答
23

尝试使用

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

或者

sudo ssh -i mykey.pem ec2-user@<ec2_ip_public_dns>
于 2014-06-30T13:43:51.847 回答
22

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

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

(在 Ubuntu 实例上复制。)

于 2015-07-02T12:17:37.327 回答
7

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

ssh -i pemfile.pem -l ubuntu dns
于 2014-03-10T20:51:30.523 回答
7

您需要执行以下步骤:

  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.

于 2017-03-11T02:11:58.763 回答
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

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

于 2015-05-19T19:49:13.037 回答
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
于 2016-03-31T08:42:26.770 回答
3

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

每次我启动一个实例时,我都会出现权限被拒绝的情况。我还没有验证这一点,但我的理论是在我尝试 ssh 进入服务器之前,服务器还没有完全设置好。在拒绝许可的情况下尝试了几次后,我等待了几分钟,然后我就可以连接了。如果您遇到此问题,我建议您等待五分钟,然后重试。

于 2014-01-14T15:42:06.317 回答
2

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

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

无论您创建或选择什么密钥,只有您使用的密钥(例如 XYZ)才会被新实例接受。

于 2014-03-17T01:51:52.300 回答
2

我也为此苦苦挣扎了一段时间,直到发现以下内容:

eb ssh

当你从项目目录中使用它时,bingo-bango no muss no fuss,你在

于 2015-04-22T14:06:06.973 回答
2

我在 Windows 中使用WinSCP。它在文件资源管理器和 PuTTY SSH Shell 上都能很好地访问我的 Amazon EC2-VPC Linux。chmod pem file与使用PuTTYgenpem 文件myfile.ppk 转换的内容无关。

于 2016-07-17T00:38:16.333 回答
2

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

ssh-添加-K

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

于 2017-11-11T21:33:41.270 回答
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".
于 2015-08-18T20:59:29.173 回答
1

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

ssh -i ec2key.pem ubuntu@ec2-public-IP
于 2014-12-03T09:28:39.693 回答
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

于 2017-04-06T02:52:35.383 回答
1

我有两次正确的密钥和 ssh 命令行(我知道是因为我正在复制一个工作的 Ubuntu 14.04 实例),但是即使按照上面 Wade Anderson 的建议等待 5 分钟,我也无法 ssh 进入一个新实例。

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

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

于 2015-11-01T23:18:40.220 回答
1

我有同样的问题,它很奇怪。如果您认为自己做得很好,请遵循以下内容:有时对于 EC2 实例的用户会感到困惑!有时你会得到 ec2-user、ubuntu、centos 等。所以检查你的用户名是否有机器!

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

于 2017-05-03T11:24:49.287 回答
1

我的私钥被设置为权限400,导致 Permission denied 将其设置为 '644' 帮助了我。

key_load_private_type: Permission denied是我得到的具体错误

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

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

于 2016-10-26T09:16:17.110 回答
1

这是一件基本的事情,但请始终确认您要尝试登录的用户。我的案子只是分散了注意力。我正在尝试使用root用户:

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

但是是另一个用户

ssh -i ~/keys/<key_name> dedeco@111.111.111.111
于 2017-06-08T14:35:57.593 回答
1

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

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

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

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

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

之后,我的 ssh 在没有权限被拒绝(公钥)的情况下再次开始工作。

于 2017-06-29T16:48:19.263 回答
1

您必须检查以下几件事:

  1. 确保您的 IP 地址正确
  2. 确保您使用的是正确的密钥
  3. 确保您使用的是正确的用户名,您可以尝试:3.1。管理员 3.2。ec2 用户 3.3。ubuntu

我遇到了同样的问题,将用户名更改为ubuntu后解决了。在 AWS 文档中提到了用户 ec2-user 但不知何故对我不起作用。

于 2016-10-01T14:19:26.797 回答
0

它区分大小写。

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

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

于 2018-04-25T00:38:19.450 回答
0
于 2018-04-05T08:48:24.963 回答
0

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

检查“使用说明”

上面所有的好建议,但我遇到的是我选择了一个预制实例。实例启动后,查看使用说明。在我应该使用“bitnami”的说明中,我错误地使用了私钥的登录 ID(例如 bitnami@domain -i key.pem)

于 2018-01-27T21:41:06.070 回答
-1

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

于 2018-04-02T20:21:57.613 回答
-1

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

我想出这一点的方法是从我的私钥中获取公钥,如下所示:

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

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

于 2017-08-09T20:12:03.873 回答