当SSH访问Amazon EC2实例时,权限被拒绝(publickey)
我想使用我的Amazon EC2实例,但遇到以下错误:
Permission denied (publickey).
我已经创build了我的密钥对并下载了.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上传/下载文件?
此错误消息表示您未通过身份validation。
这些是常见的原因,可能会导致:
- 试图连接错误的关键。 你确定这个实例使用这个密钥对吗?
- 试图用错误的用户名连接。
ubuntu
是基于ubuntu的AWS发行版的用户名,但在其他一些版本中,它是ec2-user
(或者某些Debian的admin
,根据Bogdan Kulbida的回答)(也可以是root
,fedora
,见下) - 尝试连接错误的主机。 这是你正在尝试login到的正确的主机?
请注意,如果您在EC2实例上弄糟了/home/<username>/.ssh/authorized_keys
文件,也会发生1.
.。
关于2.
,AMI Image描述中常常缺less关于应使用哪个用户名的信息。 但是您可以在AWS EC2文档中find一些第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,用户名是Fedora或者ec2用户 。 对于SUSE Linux,用户名是root 。 否则,如果ec2-user和root不起作用,请咨询您的AMI提供商。
最后 ,请注意authentication失败的原因还有很多。 如果您关心在您的SSH命令中添加-v
选项并读取输出,SSH通常会非常明确地指出发生了什么问题,正如许多其他对此问题的解答中所述。
在这种情况下,问题来自丢失的密钥对。 对这个:
- 没有办法改变实例上的密钥对 。 您必须创build一个使用新密钥对的新实例。
- 如果您的实例被Elastic Beanstalk上的应用程序使用,则可以解决该问题 。
您可以按照以下步骤操作:
- 访问AWSpipe理控制台
- 打开Elastic Beanstalk选项卡
- 从所有应用程序选项卡中select你的应用
- 从左侧菜单中selectconfiguration
- 点击Instances Gear
- 在服务器表单中检查EC2密钥对input并select新的密钥对。 您可能需要刷新列表才能看到刚刚创build的新密钥对。
- 保存
- Elastic Beanstalk将为您创build与新密钥对关联的新实例。
一般来说,请记住,您必须允许您的EC2实例接受入站SSH通信。
为此,您必须为您的EC2实例的安全组创build特定的规则。 你可以按照这些步骤。
- 访问AWSpipe理控制台
- 打开EC2选项卡
- 从“ 实例”列表中select您感兴趣的实例
- 在“ 描述”选项卡中 ,请input您的实例正在使用的安全组名称。
- 再次在描述选项卡上单击查看规则,并检查您的安全组是否有端口22上的入站sshstream量的规则
- 如果没有,请在Network&Security中select安全组
- select您的实例使用的安全组 ,然后单击入站选项卡
- 入站选项卡左侧可以组成SSH入站stream量的规则:
- 创build一个新的规则 :SSH
- 来源 :您想要访问实例的IP地址或子网
- 注意 :如果你想授予无限制访问你的实例,你可以指定0.0.0.0/0 ,尽pipe亚马逊不推荐这种做法
- 点击添加规则 ,然后应用您的更改
- 检查您现在是否可以通过SSH连接到您的实例。
希望这可以帮助别人帮助我。
这就是我解决问题的方法
ssh -i <key> ec2-user@<ec2 ip>
我解决了问题,只是把sudo
之前
sudo ssh -i mykey.pem myec2.amazonaws.com
但正确的解决办法是先改变所有权,然后像Janus Troelsen所说的那样作为普通用户进行连接。 就我而言,这将是:
chown wellington:wellington key.pem
尝试使用
sudo ssh -i mykey.pem ubuntu@<ec2_ip_public_dns>
要么
sudo ssh -i mykey.pem ec2-user@<ec2_ip_public_dns>
这个错误的另一个可能的原因:
当用户的主目录是可写组时 ,用户不能login。
(在Ubuntu实例上转载)
您需要执行以下步骤:
- 如果您使用的是Linux,请打开您的SSH客户端或terminal。
- find您的私钥文件并更改您的目录。
cd <path to your .pem file>
- 执行以下命令:
chmod 400 <filename>.pem
ssh -i <filename>.pem ubuntu@<ipaddress.com>
如果ubuntu
用户不工作,然后尝试与ec2-user
。
对于Ubuntu 12.04 lts微型实例,我不得不将用户名设置为选项
ssh -i pemfile.pem -l ubuntu dns
另外对于一些Debian操作系统,用户名是admin
。 至less对于6.5和7.0版本。
我同样拒绝许可的错误,显然是由于这个错误
key_parse_private2: missing begin marker
在我的情况下,原因是当前用户的sshconfiguration文件(〜/ .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
很多debugging线在这里被切断
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.
上面的第三行是确定问题的地方; 然而,我从底部(上面)四条线查找debugging消息,并被误导。 关键没有问题,但我testing了它并比较了其他configuration。
我的用户sshconfiguration文件通过一个意外的全局设置来重置主机,如下所示。 第一个主机行不应该是一个评论。
$ 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
我希望别人认为这有帮助。
在连接我的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
这发生在我身上多次。 我已经使用了免费层的Amazon Linux AMI 2013.09.2和Ubuntu Server 12.04.3 LTS。
每次我启动一个实例,我都有权限拒绝显示。 我没有证实这一点,但我的理论是,服务器并没有完全build立之前,我试图进入它。 经过几次拒绝许可的尝试之后,我等了几分钟,然后就可以连接了。 如果你有这个问题,我build议等待五分钟,然后再试一次。
这是一个可能令人沮丧的情况,产生这个错误:
如果您正在从另一个实例(例如xyz实例)创build的AMI中启动新实例,则新实例将只接受实例A使用的相同密钥。 这是完全可以理解的,但是会让人感到困惑,因为在创build新实例的一步一步的过程中,会要求您select或创build一个无效的密钥(在最后一步)。
无论您创build或select的密钥如何,只有您用于XYZ实例的密钥才会被新实例接受。
我也苦苦挣扎了一段时间,直到find以下内容:
eb ssh
当你从项目目录中使用它时,宾果游戏没有麻烦,你在
在我自己的情况下,我做了以下几点:
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".
我在Windows中使用WinSCP 。 它在文件资源pipe理器和PuTTY SSH Shell上运行良好,可以访问我的Amazon EC2-VPC Linux。 与chmod pem file
无关,因为它使用由pem文件中的 PuTTYgen 转换的myfile.ppk
。
这个问题可以通过使用以下命令login到Ubuntu框来解决:
ssh -i ec2key.pem ubuntu@ec2-public-IP
我有两次键和ssh命令行正确(我知道,因为我复制了一个工作的Ubuntu 14.04实例),但只是没有能够ssh到一个新的实例,即使在等待5分钟,如上面的韦德安德森build议。
我不得不销毁并重新创build机器。 这发生在两个不同的场合。 由于我最初无法入场,所以我看不出有什么问题。
所以,如果你有这个问题,试试看。
你必须检查这几件事情:
- 确保你的IP地址是正确的
- 确保你使用的是正确的密钥
- 确保你使用的是正确的用户名,你可以试试:3.1。 pipe理员3.2。 ec2-user 3.3。 Ubuntu的
我有同样的问题,并在我更改用户名到Ubuntu后解决。 在AWS文档被提到用户ec2用户,但不知何故不适合我。
我的私钥被设置为权限400
,并导致权限被拒绝设置为'644'帮助我。
key_load_private_type:权限被拒绝是我得到的具体错误
解决scheme: Sudo chmod 644 <key.pem>
注意:设置为644是必须的,它不适用于400
当你尝试做
ssh -i <.pem path> root@ec2-public-dns
您会收到一条消息,build议您使用ec2-user
。
Please login as the user "ec2-user" rather than the user "root".
所以使用
ssh -i <.pem path> ec2-user@ec2-public-dns
我有同样的问题,它很奇怪。 如果您认为自己所做的一切都不如以下:有时EC2实例的用户会感到困惑! 有时候你会得到ec2-user,ubuntu,centos等等。所以请检查你的用户名为machie!
用root用户 ssh -i yourkey.pem (400 permission) root@<ip>
它会抛出错误,会给你可用的用户名 。 然后用该用户login。
这是一个基本的东西,但总是确认你正在尝试login的用户。 我的情况只是一个分心 。 我正在尝试使用root用户:
ssh -i ~/keys/<key_name> root@111.111.111.111
但是另一个用户 :
ssh -i ~/keys/<key_name> dedeco@111.111.111.111
我有同样的错误,但不同的情况。 对我来说,经过很长一段时间之后,我突然发现,我可以成功地将SSH连接到远程计算机。 经过大量的search解决scheme,我的问题在哪里文件的权限。 这很奇怪,因为我没有改变我的电脑或属于ssh的文件/目录的远程的权限。 所以从这个好的archlinux维基在这里是:
对于本地机器来说这样做:
$ chmod 700 ~/ $ chmod 700 ~/.ssh $ chmod 600 ~/.ssh/id_ecdsa
对于远程机器来说:
$ chmod 700 ~/ $ chmod 700 ~/.ssh $ chmod 600 ~/.ssh/authorized_keys
之后,我的SSH再次开始工作,没有许可被拒绝(publickey)的事情。
同样的事情发生在我身上,但是所发生的一切就是私钥在我本地机器上的钥匙串中丢失了。
ssh-add -K
重新添encryption钥,然后通过ssh命令连接返回工作。
我能够从一台机器SSH,但不能从另一台机器。 原来我使用了错误的私钥。
我想通过从我的私钥中获取公钥的方式如下:
ssh-keygen -y -f ./myprivatekey.pem
出来的内容与EC2实例上~/.ssh/authorized_keys
中的内容不匹配。