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

Kas*_*ail 355 ssh amazon-ec2 amazon-web-services

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

Permission denied (publickey).
Run Code Online (Sandbox Code Playgroud)

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

鉴于:

chmod  600 pem file.
Run Code Online (Sandbox Code Playgroud)

然后,这个命令

ssh -i /home/kashif/serverkey.pem  ubuntu@ec2-54-227-242-179.compute-1.amazonaws.com
Run Code Online (Sandbox Code Playgroud)

但有这个错误:

Permission denied (publickey)
Run Code Online (Sandbox Code Playgroud)

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

Thi*_* D. 589

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

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

  1. 试图用错误的密钥连接.你确定这个实例正在使用这个密钥对吗?
  2. 试图用错误的用户名连接.ubuntu是一个基于AWS分布Ubuntu的用户名,但在另一些它的ec2-user(或admin在某些Debians,根据波格丹Kulbida的答案)(也可以是root,fedora,见下文)
  3. 试图连接错误的主机.这是您尝试登录的正确主机吗?

请注意,1.如果您/home/<username>/.ssh/authorized_keys在EC2实例上搞乱了文件,也会发生这种情况.

关于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提供商.

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

  • #2解决了我的问题,谢谢! (81认同)
  • 关于#1,错误的密钥,在ssh命令行中添加-v(详细)显示了它正在尝试的密钥,这让我意识到它没有尝试我生成的密钥,因为我已将其命名为id_rsa以外的其他密钥或id_dsa. (7认同)
  • 这个答案为我解决了.此实例的默认用户名是"ubuntu",而不是AWS手册中所述的ec2-user.尝试使用'ec2-user@_your_EC2_IP.amazonaws.com (4认同)
  • "ubuntu是基于ubuntu的AWS发行版的用户名,"这就是我的意思.习惯了ec2-user,只是假设它始终是用户名. (3认同)
  • 我不认为界面允许您向正在运行的实例添加密钥,因此如果丢失了正在运行的实例的密钥,则必须启动一个新密钥. (2认同)
  • @Raj我认为图像描述中缺少信息.您可以在AWS文档中找到它:http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstancesLinux.html at bullet point 4."[...]您将指定私钥(. pem)file和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提供商." (2认同)

Mat*_*ani 48

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

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

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

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

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

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

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

希望这能帮助有人帮助我.


小智 43

这就是我解决问题的方法

ssh -i <key> ec2-user@<ec2 ip>
Run Code Online (Sandbox Code Playgroud)


Wel*_*ndo 26

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

sudo ssh -i mykey.pem myec2.amazonaws.com
Run Code Online (Sandbox Code Playgroud)

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

chown wellington:wellington key.pem
Run Code Online (Sandbox Code Playgroud)

  • 正确的解决方案是首先更改所有权,然后以普通用户身份进行连接.使用`sudo chown wellington:wellington key.pem`. (4认同)

Abh*_*pta 23

尝试使用

sudo ssh -i mykey.pem ubuntu@<ec2_ip_public_dns>
Run Code Online (Sandbox Code Playgroud)

要么

sudo ssh -i mykey.pem ec2-user@<ec2_ip_public_dns>
Run Code Online (Sandbox Code Playgroud)


Ste*_*pan 22

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

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

(转载于Ubuntu实例.)


dc1*_*c10 7

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

ssh -i pemfile.pem -l ubuntu dns
Run Code Online (Sandbox Code Playgroud)


小智 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.


Ben*_*Paz 5

我显然因为相同的许可拒绝错误而挣扎

key_parse_private2: missing begin marker 
Run Code Online (Sandbox Code Playgroud)

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

使用以下内容:

ssh -i ~/myKey.pem ec2-user@<IP address> -v 'exit'
Run Code Online (Sandbox Code Playgroud)

初始输出显示:

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
Run Code Online (Sandbox Code Playgroud)

...这里有很多调试线...

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.
Run Code Online (Sandbox Code Playgroud)

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

我的用户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
Run Code Online (Sandbox Code Playgroud)

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