尝试SSH到Amazon Ec2实例 – 权限错误

这可能是一个愚蠢简单的问题:)

我在Amazon EC2上创build了一个新的Linux实例,并且下载了.pem文件的一部分,以允许我进入SSH。

当我试图与ssh:

ssh -i myfile.pem <public dns> 

我有:

 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: UNPROTECTED PRIVATE KEY FILE! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ Permissions 0644 for 'amazonec2.pem' are too open. It is recommended that your private key files are NOT accessible by others. This private key will be ignored. bad permissions: ignore key: amazonec2.pem Permission denied (publickey). 

在这篇文章之后,我尝试了chmod +600的pem文件,但是现在当我使用ssh的时候,我刚刚得到:

 Permission denied (publickey). 

我在这里做什么学校的男孩错误? .pem文件位于我的主文件夹(在osx中​​)。 它的权限是这样的:

 -rw-------@ 1 mattroberts staff 1696 19 Nov 11:20 amazonec2.pem 

问题是在文件上有错误的国防部。

通过执行轻松解决 –

chmod 400 mykey.pem

从亚马逊的指示采取 –

您的密钥文件不能公开查看,以便SSH工作。 如果需要,使用此命令:chmod 400 mykey.pem

您可能使用错误的用户名login:

  • 大多数Ubuntu图像都有一个用户ubuntu
  • 亚马逊的AMI是ec2-user
  • 大多数Debian的图像都有root或者admin

要login,您需要调整您的ssh命令:

 ssh -l USERNAME_HERE -i .ssh/yourkey.pem public-ec2-host 

HTH

我知道这场比赛已经很晚了,但是这对我来说总是有效的:

步骤1

 ssh-add ~/.ssh/KEY_PAIR_NAME.pem 

第2步,只需ssh在:)

 ssh [your instance name/ user name]@[amazon address].[com] 

希望这可以帮助别人。

好吧,唯一能为我工作的是:

  1. 更改密钥的权限

    chmod 400 mykey.pem

  2. 确保使用ec2-user和正确的ec2-99 …地址login。 当您login并查看您的实例时,ec2-99地址位于aws控制台的底部

    ssh -i mykey.pem ec2-user@ec2-99-99-99-99.compute-1.amazonaws.com

看看这篇文章 。 你不使用公共DNS,而是使用表单

 ssh -i your.pem root@ec2-XXX-XXX-XXX-XXX.z-2.compute-1.amazonaws.com 

名称在您的AMI面板上可见

更改密钥文件的权限:

 chmod 400 key-file-name.pem 

请参阅AWS文档以连接到实例:

http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EC2_GetStarted.html#EC2_ConnectToInstance_Linux

在Macterminal上,做“chmod 400 xyz.pem”没有帮助我,它一直说权限被拒绝。 对于Ubuntu的用户,我会build议

  1. ssh-add xyz.pem
  2. ssh -i xyz.pem ubuntu@ec2-54-69-172-118.us-west-2.compute.amazonaws.com (注意用户是ubuntu)

我知道这个问题已经得到了回答,但对于那些已经尝试过的人来说,你仍然感到恼火的“权限被拒绝(publickey)”。 尝试用SUDO运行你的命令。 当然这是一个临时解决scheme,你应该正确设置权限,但至less可以让你确定你的当前用户没有以你所需要的权限运行(如你所设想的那样)

sudo ssh -i amazonec2.pem ec2-xxx-xxx-xxx-xxx.us-west-2.compute.amazonaws.com

一旦你这样做,你会得到这样的消息:

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

这也是稀less的文件。 在这种情况下,只要这样做:

sudo ssh -i amazonec2.pem ec2-xxx-xxx-xxx-xxx.us-west-2.compute.amazonaws.com -l ec2-user

你会得到光荣的:

  __| __|_ ) _| ( / Amazon Linux AMI ___|\___|___| 

SSH密钥和文件权限最佳实践:

  • .ssh目录 – 0700(仅限所有者)
  • 私钥/ .pem文件 – 0400(只读所有者)
  • 公钥/ .pub文件 – 0600(只能由所有者读写)

    chmod XXXX file/directory

ssh -i /.pem user @ host-machine-IP

我认为这是因为要么你input了错误的凭证,要么你使用的是公钥而不是私钥,或者你的端口权限是打开的,所有的都是ssh。 这对亚马逊是不利的。

使用PuTTY替代login。 它的好,但需要几个步骤。

  1. 获取您在第一次创buildEC2实例时生成的.pem。
  2. 使用PuttyGen转换.pem文件.ppk,因为PuTTY不读取.pem。
  3. 打开PuTTY并input您的主机名 ,这是您的实例用户名+公有DNS(例如ubuntu@ec2-xxx-xxx-xxx-xxx.region.compute.amazonaws.com)。 不是您的AWS账户用户名。
  4. 然后导航到Connection> SSH> Auth 。 然后添加您的.ppk文件。 点击浏览它说“私钥文件进行身份validation”
  5. 点击打开,你应该能够立即build立连接。

我在Windows中使用PuTTY 0.66。

清单:

  1. 您是否使用正确的私钥.pem文件?

  2. 其权限设置是否正确? (我的亚马逊品牌的AMI与644一起工作,但红帽必须至less600或400.不知道Ubuntu。)

  3. 你在你的SSH线使用正确的用户名? Amazon品牌=“ec2-user”,Red Hat =“root”,Ubuntu =“ubuntu”。 用户可以指定为“ssh -i pem usename @ hostname”或“ssh -l username -i pem hostname”

做一个chmod 400 yourkeyfile.pem如果你的实例是亚马逊linux,那么使用ssh -i yourkeyfile.pem ec2-user @ ip for ubuntu ssh -i yourkeyfile.pem ubuntu @ ip for centos ssh -i yourkeyfile.pem centos @ ip

这个错误背后有三个原因。

  1. 你正在使用一个错误的键。
  2. 您的密钥没有正确的权限。 你需要chmod到400。
  3. 您正在使用错误的用户。 Ubuntu的图像有一个用户ubuntu ,亚马逊的AMI是ec2用户和debian图像有pipe理员

解决这个问题的方法是在apps目录中移动.pem文件。 所以说fooapp是我的应用程序的名称。 我把它直接放在那里。

以下是Linux用户使用.pem文件连接到服务器的简单步骤:

步骤1:到pem文件的位置并将其复制到home .ssh位置。

 cp example.pem ~/.ssh/example.pem 

第二步:更改权限

 chmod 400 ~/.ssh/example.pem 

第三步:运行以下命令

 ssh -i ~/.ssh/example.pem ec2-user@host.com 

由于这个命令太长,所以你可以用下面的命令创build别名:

  vim ~/.bashrc 

最后以下面的方式写下相同的命令。

 alias sshConnect='ssh -i ~/.ssh/example.pem ec2-user@host.com' 

现在重新启动您的系统,并使用sshConnect连接到您的服务器。

只需将pem文件的权限更改为0600,只允许允许的用户使用,它将像魅力一样工作。

 sudo chmod 0600 myfile.pem 

然后尝试SSH它会完美的工作。

 ssh -i myfile.pem <<ssh_user>>@<<server>> 

添加-v标志为我工作

 ssh -v -i your.pem <aws dns or ip>