我想使用我的Amazon ec2实例,但遇到以下错误:
Permission denied (publickey).
我创建了密钥对并下载了 .pem 文件 .
鉴于:
chmod 600 pem file.
然后,这个命令
ssh -i /home/kashif/serverkey.pem ubuntu@ec2-54-227-242-179.compute-1.amazonaws.com
但有这个错误:
Permission denied (publickey)
另外, how can I connect with filezilla to upload/download files?
29 回答
同样的事情发生在我身上,但所有发生的事情都是私钥从我本地机器的钥匙串上丢失了 .
重新添加密钥,然后ssh命令连接返回工作 .
尝试使用
要么
我的私钥被设置为权限
400
并导致权限被拒绝将其设置为'644'帮助了我 .key_load_private_type: Permission denied 是我得到的具体错误
Solution:
Sudo chmod 644 <key.pem>
注意:必须设置为644,它不能与400一起使用
我能够从一台机器SSH,但不能从另一台机器SSH . 结果我使用了错误的私钥 .
我想出来的方法是从我的私钥获取公钥,如下所示:
ssh-keygen -y -f ./myprivatekey.pem
出来的内容与EC2实例中
~/.ssh/authorized_keys
中的内容不匹配 .这发生在我身上多次 . 我使用的是Amazon Linux AMI 2013.09.2和Ubuntu Server 12.04.3 LTS,它们都是免费的 .
我每次启动一个实例时都会被拒绝显示 . 我没有验证这一点,但我的理论是在我尝试ssh之前服务器没有完全设置 . 经过几次尝试拒绝后,我等了几分钟,然后我才能连接 . 如果你遇到这个问题我建议等五分钟再试一次 .
我显然因为相同的许可拒绝错误而挣扎
在我的情况下,原因是当前用户的ssh配置文件(〜/ .ssh / config) .
使用以下内容:
初始输出显示:
......这里有很多调试线...
上面的第三行是确定问题的实际情况;但是,我在调试消息中查找了从底部开始的四行(上图),并被误导了 . 密钥没有问题,但我测试了它并比较了其他配置 .
我的用户ssh配置文件通过非预期的全局设置重置主机,如下所示 . 第一个主机线不应该是评论 .
我希望其他人觉得这很有帮助 .
另一个可能的问题:登录ID错误
查看'使用说明'
以上所有好的建议,但我遇到的是我选择了一个预先制作的实例 . 实例启动后,请查看使用说明 . 我错误地使用私钥的登录ID时,我应该使用'bitnami'(例如bitnami @ domain -i key.pem)
我也挣扎了一段时间,直到找到以下内容:
当你从项目目录中使用它时,bingo-bango没有大惊小怪,你在
这是一个基本的事情,但始终确认您尝试登录的用户 . 我是我的情况 was just a distraction . 我正在尝试使用 root 用户:
但是 another user :
我之前把
sudo
解决了问题但正确的解决方案是首先更改所有权,然后像Janus Troelsen所说的那样以普通用户身份进行连接 . 在我的情况下,它将是:
您需要执行以下步骤:
如果您使用的是Linux,请打开您的ssh客户端或终端 .
找到您的私钥文件并更改目录 .
cd <path to your .pem file>
执行以下命令:
chmod 400 <filename>.pem
ssh -i <filename>.pem ubuntu@<ipaddress.com>
如果
ubuntu
用户无法正常工作,请尝试使用ec2-user
.这就是我解决问题的方法
在这种情况下,问题出现在丢失的密钥对上 . 对这个:
There's no way to change Key Pair on an instance . 您必须创建一个使用新密钥对的新实例 .
You can work around the problem 如果您的实例由 Elastic Beanstalk 上的应用程序使用 .
您可以按照以下步骤操作:
访问 AWS Management Console
打开 Elastic Beanstalk 标签
从 All Applications 选项卡中选择您的应用程序
从左侧menù选择 Configuration
点击 Instances Gear
在 Server 表格中检查 EC2 Key Pair 输入并选择新的密钥对 . 您可能必须 refresh 列表才能看到刚刚创建的新密钥对 .
Save
Elastic Beanstalk将为您创建与新密钥对关联的新实例 .
通常,请记住您必须允许EC2实例接受入站SSH流量 .
为此,您必须为EC2实例的安全组创建特定规则 . 您可以按照以下步骤操作 .
访问 AWS Management Console
打开 EC2 Tab
从 Instances 列表中选择您感兴趣的实例
在 Description Tab chek中,您的实例正在使用 Security Group 的名称 .
再次在 Description Tab 中单击 View rules 并检查您的安全组是否在端口22上有入站ssh流量规则
如果没有,请在 Network & Security menù中选择 Security Group
选择实例使用的 Security Group ,然后单击 Inbound Tab
在“入站”选项卡的左侧,您可以为SSH入站流量组成规则:
Create a new rule :SSH
Source :IP地址或要从中访问实例的子网
Note :如果您希望无限制地访问您的实例,您可以指定0.0.0.0/0,尽管亚马逊不推荐这种做法
单击 Add Rule 然后 Apply Your Changes
检查您现在是否能够通过SSH连接到您的实例 .
希望这可以帮助有人帮助我 .
我已经两次使用了密钥和ssh命令行是正确的(我知道因为我正在复制一个正在运行的Ubuntu 14.04实例),但是即使在上面的Wade Anderson建议的等待5分钟之后,也无法进入新的实例 .
我不得不销毁并重新创造机器 . 这发生在两个不同的场合 . 由于我最初无法进入,我看不出有什么问题 .
所以,如果你有这个问题,试试吧 .
使用以下命令登录Ubuntu框可以解决此问题:
你必须检查以下几点:
确保您的IP地址正确无误
确保使用正确的密钥
确保使用正确的用户名,您可以尝试:3.1 . 管理员3.2 . ec2-user 3.3 . Ubuntu的
我有同样的问题,在我将用户名更改为ubuntu后解决了 . 在AWS文档中提到了用户ec2-user,但不知何故对我不起作用 .
我忘了在连接我的Ubuntu实例时添加用户名(ubuntu) . 所以我尝试了这个:
而正确的方法是
以下是可能产生此错误的令人沮丧的情况:
如果您正在从另一个实例(例如实例xyz)创建的AMI中获取新实例,则新实例将只接受实例A使用的相同密钥 . 这是完全可以理解的,但它会让人感到困惑,因为在创建新实例的逐步过程中,系统会要求您选择或创建一个不起作用的密钥(在最后一步) .
无论您创建或选择的密钥如何,新实例都只接受您用于实例XYZ的密钥 .
我有同样的问题而且非常奇怪 . 如果你认为你做得很好而不是遵循这个:有时候EC2实例的用户会感到困惑!有时候你会得到ec2-user,ubuntu,centos等 . 所以检查你的用户名为机器人!!
Login with root user
ssh -i yourkey.pem (400 permission) root@<ip>
It will throw error and will give you the available username . 然后使用该用户登录 .此错误消息表示您无法进行身份验证 .
这些是导致这种情况的常见原因:
尝试连接错误的密钥 . 你确定这个实例正在使用这个密钥对吗?
尝试使用错误的用户名进行连接 .
ubuntu
是基于ubuntu的AWS发行版的用户名,但在其他一些发行版上,根据Bogdan Kulbida的回答,它是ec2-user
(或某些Debian上的admin
)(也可以是root
,fedora
,见下文)尝试连接错误的主机 . 这是您尝试登录的正确主机吗?
请注意,如果您在EC2实例上搞乱了
/home/<username>/.ssh/authorized_keys
文件,也会发生1.
.关于
2.
,您应该使用的用户名信息通常缺少AMI图像说明 . 但您可以在AWS EC2文档中找到一些,项目符号4.
:http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstancesLinux.htmlFinally ,请注意,身份验证失败还有很多其他原因 . 如果你想在你的SSH命令中添加
-v
选项并读取输出,SSH通常非常明确地说明出了什么问题,正如该问题的许多其他答案中所解释的那样 .当你尝试做
ssh -i <.pem path> root@ec2-public-dns
您收到一条消息,建议您使用
ec2-user
.Please login as the user "ec2-user" rather than the user "root".
所以用
ssh -i <.pem path> ec2-user@ec2-public-dns
以上所有排名靠前的答案都是准确的,适用于大多数情况 . 如果他们不像我的情况那样,我只是在我试图ssh的机器上摆脱我的
~/.ssh/known_hosts
文件,这解决了我的问题 . 之后我能够连接 .我有类似的错误
我的问题是,由于
Step 3: Configure instance detail
下Step 3: Configure instance detail
的run-on-start-up脚本出错,实例无法正常启动我以为我输入了什么:
#include https://xxxx/bootstrap.sh
实际输入的内容会破坏实例设置
#include
``
https://xxxx/bootstrap.sh
因此,实例端的公钥未创建
我在Windows中使用WinSCP . 它在文件资源管理器和PuTTY SSH Shell上运行良好,可以访问我的Amazon EC2-VPC Linux . 与
chmod pem file
无关,因为它使用pem文件中的myfile.ppk
converted来自PuTTYgen .对于ubuntu 12.04 lts micro实例,我不得不设置用户名作为选项
这是区分大小写的 .
错了:SSH EC2-user @XXX.XX.XX.XX -i MyEC2KeyPair.pem
正确:SSH ec2-user @XXX.XX.XX.XX -i MyEC2KeyPair.pem
我有同样的错误但不同的情况 . 对我来说,经过很长一段时间我才能成功地将我的远程计算机发送到那里 . 经过大量搜索后我的问题的解决方案是文件权限 . 这当然很奇怪,因为我没有_321032的文件/目录 . 所以从良好的archlinux wiki这里是:
对于本地机器这样做:
对于远程机器这样做:
之后我的ssh在没有被拒绝(publickey)的情况下再次开始工作 .
导致此错误的另一个可能原因:
当用户的 home directory is group writeable 时,用户无法登录 .
(转载于Ubuntu实例 . )
就我自己而言,我做了以下事情:
我最初使用
root@
部分,我得到了这个提示: