这对某些人来说可能是一个非常简单的问题:)
我在Amazon EC2上创建了一个新的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).
在this post之后我尝试chmod 600 pem文件,但现在当我ssh我得到:
Permission denied (publickey).
我在这里做的男生错误是什么? .pem文件位于我的主文件夹中(在osx中) . 它的权限如下所示:
-rw-------@ 1 mattroberts staff 1696 19 Nov 11:20 amazonec2.pem
26 回答
此错误仅是因为许可 .
只需给予许可600
#chmod 600 pemfilepath
我知道这场比赛已经很晚了......但是 always 适合我:
步骤1
第2步,只需ssh in :)
例如
希望这有助于某人 .
这个错误背后有三个原因 .
您使用的是错误的密钥 .
您的密钥没有正确的权限 . 你需要chmod到400 .
您使用的是错误的用户 . Ubuntu图像有一个用户 ubuntu ,亚马逊的AMI是 ec2-user ,debian图像有 root 或 admin
我看到这个问题背后有两个原因
1)访问密钥没有权限 . 具有默认权限的pem密钥不允许 Build 安全连接 . 您只需更改权限:
chmod 400 xyz.pem
2)还要检查您是否使用正确的用户凭据登录 . 否则,在连接时使用sudo
sudo ssh -i ec2-user @ {远程主机的IP地址}
默认情况下,权限不允许pem键 . 您只需更改权限:
chmod 400 xyz.pem
如果ubuntu实例然后连接使用:
ssh -i xyz.pem ubuntu@ec2-youraws.amazonaws.com
问题是文件上有错误的mod .
通过执行轻松解决 -
chmod 400 mykey.pem
取自亚马逊的指示 -
ssh -i /.pem user @ host-machine-IP
我认为这是因为您输入了错误的凭据,或者您使用的是公钥而不是私钥,或者您的端口权限对所有人都是开放的 . 这对亚马逊来说很糟糕 .
做一个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
那么,看看你的帖子描述我觉得你做了2个错误: -
chmod 0600 mykey.pem
查看调试日志,我认为您已经生成了一个Amazon Linux实例 . 该实例类型的默认用户是
ec2-user
. 如果实例是ubuntu那么你的默认用户就是ubuntu
.ssh -i privatekey.pem default_ssh_user@server_ip
对于Centos AMI,默认用户名是centos .
对于Debian AMI,默认用户名是admin或root .
对于Fedora AMI,默认用户名是ec2-user或fedora .
对于RHEL AMI,默认用户名是ec2-user或root .
对于SUSE AMI,默认用户名是ec2-user或root .
对于Ubuntu AMI,默认用户名是ubuntu .
否则,如果ec2-user和root不起作用,请与AMI提供商联系 .
来源:https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstancesLinux.html
除了其他答案之外,以下是我为此工作所做的事情:
cp key.pem ~/.ssh/key.pem
chmod 400 ~/.ssh/key.pem
eval
ssh-agent -sssh-add
ssh-add ~/.ssh/key.pem
现在你应该能够ssh EC2(:
解决这个问题的方法是将.pem文件移到apps目录中 . Soo说fooapp是我的应用程序的名称 . 我把它直接放在那里 .
看看this article . 您不使用公共DNS,而是使用表单
名称在AMI面板上可见的位置
使用以下命令更改密钥文件的权限:
请参阅AWS文档以连接到实例:
http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EC2_GetStarted.html#EC2_ConnectToInstance_Linux
这只是你的aws pem键的权限问题 .
只需使用以下命令将pem键的权限更改为400即可 .
如果您没有权限更改文件的权限,可以使用sudo,如下面的命令 .
我希望这应该工作正常 .
密钥文件不应公开可见,因此请使用权限400
如果上面的命令显示权限错误使用
现在ssh进入ec2机器,如果你仍然遇到问题,请使用 ec2-user
ssh -i keyfile.pem ec2-user@ec2-12-34-56-78.compute-1.amazonaws.com
在Mac终端,做“chmod 400 xyz.pem”并没有帮助我,它一直说许可被拒绝 . 对于ubuntu用户,我建议
ssh-add xyz.pem
ssh -i xyz.pem ubuntu@ec2-54-69-172-118.us-west-2.compute.amazonaws.com
(注意用户是Ubuntu的)您可能使用错误的用户名登录:
大多数Ubuntu图片都有一个用户
ubuntu
亚马逊的AMI是
ec2-user
大多数Debian图像都有
root
或admin
要登录,您需要调整ssh命令:
HTH
我知道这个问题已经得到了回答,但对于那些尝试过这些问题的人来说,你仍然会得到令人讨厌的“Permission denied(publickey)” . 尝试使用SUDO运行命令 . 当然这是一个临时解决方案,您应该正确设置权限,但至少可以让您确定当前用户没有以您需要的权限运行(如您所假设的那样)
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"
这也很少记录 . 在这种情况下,只需这样做:
sudo ssh -i amazonec2.pem ec2-xxx-xxx-xxx-xxx.us-west-2.compute.amazonaws.com -l ec2-user
你会得到光荣的:
对我来说问题是我的.pem文件在我的一个NTFS分区中 . 我把它移到我的linux分区(ext4) .
通过运行获得所需的权限:
chmod 400 my_file.pem
它奏效了 .
使用PuTTY替代登录 . 它很好,但需要几步 .
获取首次制作EC2实例时生成的.pem .
使用PuttyGen转换.pem文件.ppk,因为PuTTY不读取.pem .
打开PuTTY并输入 Host Name ,这是您的实例用户名Public DNS(例如:ubuntu @ ec2-xxx-xxx-xxx-xxx.region.compute.amazonaws.com) . 不是您的AWS账户用户名 .
然后导航到 Connection > SSH > Auth . 然后添加 .ppk 文件 . 点击浏览"Private key file for authentication" .
单击“打开”,您应该能够立即 Build 连接 .
我在Windows中使用PuTTY 0.66 .
在Windows中,您可以转到pem文件的属性,然后转到安全选项卡,然后转到提前按钮 .
删除继承和所有权限 . 然后给自己完全控制 . 毕竟SSL不会再给你同样的错误 .
SSH密钥和文件权限最佳实践:
.ssh目录 - 0700(仅限所有者)
私钥/ .pem文件 - 0400(由所有者只读)
公钥/ .pub文件 - 0600(仅由所有者读写)
chmod XXXX file/directory
好的,对我有用的唯一一件事是:
清单:
您使用的是私钥.pem文件吗?
其权限设置正确吗? (我的亚马逊品牌AMI使用644,但红帽必须至少600或400.不知道Ubuntu . )
您是否在ssh系列中使用了正确的用户名?亚马逊品牌=“ec2-user”,Red Hat =“root”,Ubuntu =“ubuntu” . 用户可以指定为“ssh -i pem usename @ hostname”或“ssh -l username -i pem hostname”
以下是Linux用户使用.pem文件连接服务器的简单步骤:
步骤1:到pem文件的位置并将其复制到home .ssh位置 .
第2步:更改权限
步骤3:运行以下命令
由于此命令太长,因此您可以使用以下命令创建此别名:
最后以下面的方式写相同的命令 .
现在重新启动系统并使用
sshConnect
连接您的服务器 .只需将pem文件的权限更改为0600,仅允许允许的用户,它将像魅力一样工作 .
然后尝试ssh它将完美地工作 .