对某些人来说,这可能是一个非常简单的问题:)
我已经在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
答案 0 :(得分:1237)
问题是文件上有错误的mod。
通过执行 -
轻松解决 chmod 400 mykey.pem
取自亚马逊的指示 -
您的密钥文件不能公开查看以使SSH正常工作。用这个 命令如果需要:chmod 400 mykey.pem
答案 1 :(得分:251)
您可能使用错误的用户名登录:
ubuntu
ec2-user
root
或admin
要登录,您需要调整ssh命令:
ssh -l USERNAME_HERE -i .ssh/yourkey.pem public-ec2-host
HTH
答案 2 :(得分:56)
我知道游戏后期非常 ...但总是对我有用:
ssh-add ~/.ssh/KEY_PAIR_NAME.pem
ssh user_name@<instance public dns/ip>
e.g。
ssh ec2-user@ec2-198-51-100-1.compute-1.amazonaws.com
希望这有助于某人。
答案 3 :(得分:37)
好的男人,唯一对我有用的是:
更改密钥的权限
chmod 400 mykey.pem
确保使用 ec2-user 和正确的ec2-99 ...地址登录。当您登录并查看列出的实例时,ec2-99地址位于aws控制台的底部
ssh -i mykey.pem ec2-user@ec2-99-99-99-99.compute-1.amazonaws.com
答案 4 :(得分:27)
看看this article。您不使用公共DNS,而是使用表单
ssh -i your.pem root@ec2-XXX-XXX-XXX-XXX.z-2.compute-1.amazonaws.com
其名称在AMI面板上可见
答案 5 :(得分:14)
使用以下命令更改密钥文件的权限:
chmod 400 key-file-name.pem
请参阅AWS文档以连接到实例:
http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EC2_GetStarted.html#EC2_ConnectToInstance_Linux
答案 6 :(得分:7)
在Windows中,您可以转到pem文件的属性,然后转到“安全性”选项卡,然后单击“前进”按钮。
删除继承和所有权限。然后授予自己完全的控制权。毕竟SSL不会再给您同样的错误。
答案 7 :(得分:6)
在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)答案 8 :(得分:6)
我知道这个问题已经得到了回答,但对于那些已经尝试过这些问题的人来说,你仍然会得到令人讨厌的“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
你会得到光荣的:
__| __|_ )
_| ( / Amazon Linux AMI
___|\___|___|
答案 9 :(得分:4)
SSH密钥和文件权限最佳做法:
公钥/ .pub文件 - 0600(仅由所有者读取和写入)
chmod XXXX file/directory
答案 10 :(得分:3)
ssh -i /.pem user @ host-machine-IP
我认为这是因为您输入了错误的凭据 或者,您使用的是公钥而不是私钥 或者,您的端口权限对所有人打开ssh。这对亚马逊来说很糟糕。
答案 11 :(得分:3)
使用PuTTY替代登录。它很好,但需要几步。
我在Windows中使用PuTTY 0.66。
答案 12 :(得分:2)
默认情况下,每当您下载密钥文件时,它都具有 644 权限。
因此您每次下载新密钥时都需要更改权限。
chmod 400 my_file.pem
答案 13 :(得分:2)
我的问题是我的.pem文件位于我的一个NTFS分区中。我把它移到我的linux分区(ext4)。
通过运行来获得所需的权限:
chmod 400 my_file.pem
它有效。
答案 14 :(得分:2)
您可以从ASW指南中找到答案。 400通过将其设为只读且仅对所有者开放来对其进行保护。
chmod 400 mykey.pem
答案 15 :(得分:2)
在Windows中,
答案 16 :(得分:2)
此错误背后有三个原因。
答案 17 :(得分:2)
执行chmod 400 yourkeyfile.pem 如果你的实例是亚马逊linux,那么使用ssh -i yourkeyfile.pem ec2-user @ ip 对于ubuntu ssh -i yourkeyfile.pem ubuntu @ ip 为了centos ssh -i yourkeyfile.pem centos @ ip
答案 18 :(得分:2)
答案 19 :(得分:1)
密钥文件不应公开可见,因此使用权限为400
chmod 400 keyfile.pem
如果以上命令显示权限错误,请使用
sudo chmod 400 keyfile.pem
现在ssh进入ec2机器,如果仍然遇到问题,请使用 ec2-user
ssh -i keyfile.pem ec2-user@ec2-12-34-56-78.compute-1.amazonaws.com
答案 20 :(得分:1)
好吧,看着您的帖子描述,我觉得您犯了2个错误:-
设置私钥的正确权限。 下面的命令应该可以帮助您设置正确的文件渗透率。
chmod 0600 mykey.pem
您尝试登录的错误ec2用户。
查看您的调试日志,我认为您已经生成了一个Amazon Linux实例。该实例类型的默认用户为ec2-user
。如果该实例将是ubuntu,那么您的默认用户将是ubuntu
。
ssh -i privatekey.pem default_ssh_user@server_ip
Note: For an Amazon Linux AMI, the default user name is ec2-user. For a Centos AMI, the default user name is centos. For a Debian AMI, the default user name is admin or root. For a Fedora AMI, the default user name is ec2-user or fedora. For a RHEL AMI, the default user name is ec2-user or root. For a SUSE AMI, the default user name is ec2-user or root. For an Ubuntu AMI, the default user name is ubuntu. Otherwise, if ec2-user and root don't work, check with the AMI provider.
来源:https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstancesLinux.html
答案 21 :(得分:1)
答案 22 :(得分:1)
在 Windows 中,转到 .pem
文件,右键单击并选择属性。
转到安全标签中的高级
禁用并删除继承。
然后按添加并选择一个主体。
将帐户用户名添加为对象名称,然后按确定。
授予所有权限。
应用并保存更改。
现在检查上面的命令
答案 23 :(得分:1)
除了其他答案之外,我还采取了以下措施:
cp key.pem ~/.ssh/key.pem
chmod 400 ~/.ssh/key.pem
eval `ssh-agent -s`
ssh-add
ssh-add ~/.ssh/key.pem
现在你应该能够ssh EC2(:
答案 24 :(得分:1)
默认权限不允许使用pem键。 您只需要更改权限:
chmod 400 xyz.pem
如果ubuntu实例然后使用:
连接ssh -i xyz.pem ubuntu@ec2-youraws.amazonaws.com
答案 25 :(得分:1)
只需将pem文件的权限更改为0600,仅允许允许的用户使用,它将像魅力一样工作。
sudo chmod 0600 myfile.pem
然后尝试ssh它会完美运作。
ssh -i myfile.pem <<ssh_user>>@<<server>>
答案 26 :(得分:1)
清单:
您使用的是私钥.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”
答案 27 :(得分:0)
您还应该检查您的 .pem 文件是否已损坏。我花了大约一个小时摸不着头脑,决定用这条线检查
openssl rsa -check -in test.pem -noout
如果它返回“RSA key ok”,那么你很好。如果没有,请确保您拥有正确的文件,或者出于任何原因正确复制它。
答案 28 :(得分:0)
答案 29 :(得分:0)
如果您在使用 ubuntu 子系统的 Windows 10 上,并且如果您 sudo chmod 将密钥更改为 400,那么它可能仍然会出现“加载密钥 pem:权限被拒绝”的错误
ls -al 你会看到 root 现在拥有这个文件! chown 给你的登录用户,然后它就可以工作了。
答案 30 :(得分:0)
如果与您无关,请忽略此答案,但是根据我的经验,我看到人们对Permission denied (publickey)
存有疑问,因为他们只是将公钥粘贴(在目标计算机上)而没有第一个字母!
使用 vim 编辑(粘贴)密钥时会发生这种情况。由于默认情况下 vim 在命令模式中打开(而不是在插入模式中),因此粘贴密钥而不切换到插入模式< / em>(即i
)将导致跳过第一个s
字母,例如代替
ssh-rsa <key>
您最终粘贴
sh-rsa <key>
因此,在尝试其他解决方案之前,请先参阅是否正确粘贴了密钥!即
cat ~/.ssh/id_rsa.pub
仅在确定的情况下,执行以下步骤;尝试以详细模式(即标志-v
)进行SSH可能会提示您实际的问题:
ssh -v -i <private_key> <name>@<ip> -p <port>
请注意,正如其他人已经在这里提到的那样,在大多数情况下,启动一个空的 ssh代理(将密钥保存在内存中的程序)并添加密钥可以解决问题:
ssh-agent bash
ssh-add <private_key>
答案 31 :(得分:0)
您的密钥必须是公开可见的,SSH才能正常工作。如果需要,请使用以下命令:
chmod 400 Interview-apps.pem
Connect to your instance using its Public DNS:
ec2-**-***-***-***.us-west-2.compute.amazonaws.com
示例:
ssh -i "Interview-apps.pem" ec2-user@ec2-**-***-***-***.us-west-2.compute.amazonaws.com
答案 32 :(得分:0)
我已经看到了这个问题背后的两个原因
1)访问密钥没有正确的权限。具有默认权限的pem密钥不允许建立安全连接。您只需要更改权限:
chmod 400 xyz.pem
2)同时检查您是否已使用正确的用户凭据登录。否则,在连接时使用sudo
sudo ssh -i {keyfile} ec2-user @ {远程主机的IP地址}
答案 33 :(得分:0)
这只是你的aws pem键的许可问题。
使用以下命令将pem键的权限更改为400。
chmod 400 pemkeyname.pem
如果您无权更改文件的权限,可以使用sudo,如下面的命令。
sudo chmod 400 pemkeyname.pem
我希望这应该可以正常工作。
答案 34 :(得分:0)
以下是Linux用户使用.pem文件连接服务器的简单步骤:
步骤1:到pem文件的位置并将其复制到home .ssh位置。
cp example.pem ~/.ssh/example.pem
第2步:更改权限
chmod 400 ~/.ssh/example.pem
步骤3:运行以下命令
ssh -i ~/.ssh/example.pem ec2-user@host.com
由于此命令太长,因此您可以使用以下命令创建此别名:
vim ~/.bashrc
最后以下列方式编写相同的命令。
alias sshConnect='ssh -i ~/.ssh/example.pem ec2-user@host.com'
现在重新启动系统并使用sshConnect
连接您的服务器。
答案 35 :(得分:0)
解决这个问题的方法是将.pem文件移到apps目录中。 Soo说fooapp是我的应用程序的名称。我把它直接放在那里。
答案 36 :(得分:-1)
有时文件夹中可能有错误。我不知道为什么...
您可以更改文件夹,然后重试。例如,您可以尝试使用通常的文件夹(桌面,下载等)。
我尝试了这种方法并且有效
答案 37 :(得分:-2)
此错误仅是因为许可。
只需提供权限600