在 Mac OSx 上通过 SSH 连接到 EC2 时出现权限错误

Posted

技术标签:

【中文标题】在 Mac OSx 上通过 SSH 连接到 EC2 时出现权限错误【英文标题】:Permissions error when connecting to EC2 via SSH on Mac OSx 【发布时间】:2011-01-11 20:58:06 【问题描述】:

我是 EC2 的新手。我从这个站点创建了我的安全凭证:

http://paulstamatiou.com/how-to-getting-started-with-amazon-ec2

效果很好,我重新启动了,现在当我尝试连接时,我得到了登录/密码提示。 (我从未设置过。)经过几次尝试后,我得到了这个错误:

权限被拒绝(公钥、gssapi-with-mic)。

我做错了什么?

【问题讨论】:

【参考方案1】:

我能想到的两种可能性,尽管它们都在您引用的链接中提到:

    您没有在用于登录服务器的 ssh 命令中指定正确的 SSH 密钥对文件或用户名:

    ssh -i [密钥对文件的完整路径] root@[EC2 实例主机名或 IP 地址]

    您对密钥对文件没有正确的权限;你应该使用

    chmod 600 [密钥对文件]

确保只有您可以读取或写入文件。

尝试将 -v 选项与 ssh 一起使用,以获取有关失败的确切位置的更多信息,如果您需要更多帮助,请在此处回复。

[更新]:好的,如果一切设置正确,这就是您应该看到的:

debug1: Authentications that can continue: publickey,gssapi-with-mic
debug1: Next authentication method: publickey
debug1: Trying private key: ec2-keypair
debug1: read PEM private key done: type RSA
debug1: Authentication succeeded (publickey).

您是否从包含 ec2-keypair 文件的目录运行 ssh 命令?如果是这样,请尝试指定 -i ./ec2-keypair 以消除路径问题。还要检查“ls -l [ec2-keypair 的完整路径]”文件并确保权限为 600(显示为 rw-------)。如果这些都不起作用,我会怀疑密钥对文件的内容,因此请尝试使用链接中的步骤重新创建它。

【讨论】:

这里是有关错误的具体信息: debug1:可以继续的身份验证:publickey,gssapi-with-mic debug1:下一个身份验证方法:publickey debug1:尝试私钥:ec2-keypair debug1:读取PEM 私钥完成:键入 RSA debug1:可以继续的身份验证:publickey,gssapi-with-mic debug1:没有更多的身份验证方法可以尝试。权限被拒绝(公钥、gssapi-with-mic)。 我编辑了答案以添加更多信息,因为没有空间将其放入新评论中。 我查过了。我有两个密钥对,一个用于一个站点,另一个用于另一个站点。我可以使用在另一个实例上导致问题的相同密钥对而不会出现问题。问题可能出在这个特定的实例上吗?感谢您的帮助。 抱歉,我现在卡住了,尤其是您刚才提到您可以毫无问题地连接到其他实例。通过 console.aws.amazon.com 的 AWS 管理控制台检查您的实例可能值得 - 您可以仔细检查密钥对并查看系统日志以确保实例成功启动。 chmod 400 怎么样?【参考方案2】:

我能够连接的关键是使用“ec2-user”用户而不是 root。即:

ssh -i [full path to keypair file] ec2-user@[EC2 instance hostname or IP address]

【讨论】:

+1 在我按照建议将用户从 ec2user 切换到 ec2-user 之前,我遇到了同样的问题。 根据使用的 AMI / Linux disto,ssh 命令行的正确用户名可以是 root、ubuntu、ec2-user 或其他。【参考方案3】:

+1

我注意到对于 Amazon Linux 等一些 AMI,ec2-user@xxx.XX.XX.XXX 可以工作。但是对于 ubuntu 映像,我不得不改用 ubuntu@。 .pem 从来都不是问题,只是用户名。

【讨论】:

我遇到了同样的问题,通过使用正确的默认用户名已解决。我的 ec2 实例是 Red Hat Linux,用户名是 cloud-use。所以 ssh -i /path/to/key.pem cloud-user@ 起作用了。【参考方案4】:

在我的情况下,这是因为我的主目录的权限是 775,而 SSH 对此并不满意。它应该在执行后工作:

server$ chmod go-w ~/
server$ chmod 700 ~/.ssh
server$ chmod 600 ~/.ssh/authorized_keys

今天下午我有非常相似的经历。我在 EC2 上设置了 django,突然我不能再通过 SSH 进入盒子了。很高兴我仍然有一个活跃的连接,所以我修改了/etc/ssh/sshd_config 来设置:

PasswordAuthentication yes

并为ec2-user设置密码,然后我可以通过输入密码登录。

但是,经过一番谷歌搜索后,我发现了这个帖子:http://ubuntuforums.org/showthread.php?t=577279。事实证明,在我设置 django 期间,我更改了我的主目录的权限,而 SSH 对此非常严格。所以必须正确设置文件权限。

【讨论】:

"原来在我设置 django 的过程中,我更改了我的主目录的权限,而 SSH 对此非常严格。"我遇到了同样的问题,所以在看到那个提示时,我试了一下,只是为了它的地狱,一切都奏效了! !@#$% 为什么除了 .ssh/ 之外主目录也需要为 700,这超出了我的理解。并不是这样使它更安全。【参考方案5】:

我也遇到过这个问题。我发现这是因为我忘了在主机名之前添加用户名: 像这样:

ssh -i test.pem ec2-32-122-42-91.us-west-2.compute.amazonaws.com

然后我添加用户名:

ssh -i test.pem ec2-user@ec2-32-122-42-91.us-west-2.compute.amazonaws.com

有效!

【讨论】:

【参考方案6】:

关注 mecca831 的回答:

ssh -v -i generated-key.pem ec2-user@11.11.11.11

[ec2-user@ip-11.11.11.11 ~]$ sudo passwd ec2-user 新密码 新密码

[ec2-user@ip-11.11.11.11 ~]$ sudo vi /etc/ssh/sshd_config 修改文件如下:

    # To disable tunneled clear text passwords, change to no here!
    PasswordAuthentication yes
    #PermitEmptyPasswords no
    # EC2 uses keys for remote access
    #PasswordAuthentication no

保存

[ec2-user@ip-11.11.11.11 ~]$ sudo service sshd stop [ec2-user@ip-11.11.11.11 ~]$ sudo service sshd start

您应该能够按如下方式退出并通过 ssh 进入:

ssh ec2-user@11.11.11.11

并提示输入密码,不再需要密钥。

【讨论】:

【参考方案7】:

您确定您使用了正确的实例吗?我遇到了这个问题,并意识到我尝试过的 4 个 ubuntu 实例上没有安装 SSH 服务器。

有关优质服务器的列表,请参阅“获取图像”大约一半。听起来您可能正在使用其他东西...这些图像上的默认用户名是 ubuntu。

https://help.ubuntu.com/community/EC2StartersGuide

【讨论】:

用户名“ubuntu”为我修复了它【参考方案8】:

我可以使用 ec2-user 登录

ssh -i [密钥对文件的完整路径] ec2-user@[EC2 实例主机名或 IP 地址]

【讨论】:

【参考方案9】:

经过大约半小时的搜索和尝试调试后,我终于弄明白了。我的情况涉及我对两个不同的 ec2 实例使用相同的 pem 文件,它适用于一个而不适用于另一个。

我使用的第一个实例是标准的 aws linux ami amzn-ami-hvm-2014.03.2.x86_64-ebs。我只是用了

ssh -i mypemfile.pem ec2-user@myec2ipaddress 

它成功了。

然后我启动了一个 Fedora 实例 Fedora-x86_64-19-20140407-sda 并尝试了相同的命令,但一直得到:

Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

将我的用户名从 ec2-user 更改为 fedora 后,它起作用了!

ssh -i mypemfile.pem fedora@myec2address

【讨论】:

【参考方案10】:

以上都没有帮助我,但与用户打交道似乎是有希望的。对于我使用“ubuntu”的配置是正确的.....

ssh -i [密钥对文件的完整路径] ubuntu@[EC2 实例主机名或 IP 地址]

【讨论】:

【参考方案11】:

我建议不要像其他一些答案所建议的那样设置密码。使用密钥文件既更安全(没有人能猜出你的密码)也更方便(一旦你设置了一个配置文件)。这是一个基本的~/.ssh/config

Host my-ec2-server
  HostName 11.11.11.11
  User ec2-user
  IdentityFile /path/to/generated-key.pem

现在您只需输入ssh my-ec2-server 即可进入!并且正如其他答案中所提到的,当您的连接不工作时,使用 -v 获取额外信息。

【讨论】:

【参考方案12】:

如果问题是一致的并且即使在将文件权限更改为 400 或 600 之后连续发生了大约 10-15 次,那么肯定是 ec2 实例有问题,所以要确保:

    当您尝试通过在末尾添加 -v 来通过 ssh 连接到实例时检查日志,看看它是否给出了任何特定的信息。

    确保为 ssh 使用正确的名称,例如 Ubuntu。也许这取决于您添加的 Linux 发行版和用户,以及您是否已授予“root 用户”ssh 的权限。

如果没有任何帮助,请按照此处的文档进行操作 https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstancesConnecting.html#TroubleshootingInstancesConnectingMindTerm 解决这个问题。它对我的情况有所帮助,并且由于目录/文件权限混乱而发生。

【讨论】:

【参考方案13】:

如果您有一个在 PC 上运行的 PPK 文件,则使用用于 PC 的 puttygen.exe 将其导出为 OpenSSH 文件,然后在 Mac(任何 Unix 机器)上使用它。

我遇到了同样的错误 --

debug1: Authentications that can continue: publickey,gssapi-with-mic
debug1: Next authentication method: publickey
debug1: Trying private key: ec2-keypair
debug1: read PEM private key done: type RSA
debug1: Authentications that can continue: publickey,gssapi-with-mic
debug1: No more authentication methods to try.
Permission denied (publickey,gssapi-with-mic)

当我在 Windows 上使用 PPK 文件时,我按照上述步骤和 Bingo 进行操作!

$ ssh -i ec2-openssh-key root@ec2-instance-ip

【讨论】:

【参考方案14】:

我在使用 AWS Toolkit for Eclipse 时遇到了同样的问题。我创建了 Getting Started 实例 OK 并打开了一个 shell。但是,用户被设置为 ec2-user。我使用 Open Shell As... 命令并将用户设置为 root。然后就成功了。

【讨论】:

【参考方案15】:

有类似的问题。以下是用于在 Mac 上设置 SSH 密钥和转发的步骤。为我自己做了这些笔记 - 可能对某人有所帮助...检查您的配置。

这里的假设是没有键设置。如果您已经设置了密钥,请跳过此部分。

$ ssh-keygen -t rsa -b 4096

生成公钥/私钥 rsa 密钥对。

输入保存密钥的文件(/Users/you/.ssh/id_rsa):[按回车键] Enter passphrase (empty for no passphrase): [Type a passphrase] 再次输入相同的密码:[再次输入密码]

修改 ~/.ssh/config 添加密钥文件的条目:

~/.ssh/config 应该类似于:

主机 *

AddKeysToAgent 是

使用钥匙串是的

身份文件 ~/.ssh/id_rsa

将私钥存储在钥匙串中:

$ ssh-add -K ~/.ssh/id_rsa

现在去测试它:ssh -A username@yourhostname

应该将您的密钥转发给您的主机名。假设您的密钥已添加,您应该可以毫无问题地连接。

【讨论】:

【参考方案16】:
I was getting this error when I was trying to ssh into an ec2 instance on the private subnet from the bastion, to fix this issue, you've to run (ssh-add -K) as follow.

    Step 1: run "chmod 400 myEC2Key.pem"
    Step 2: run "ssh-add -K ./myEC2Key.pem" on your local machine
    Step 3: ssh -i myEC2Key.pem root@ec2-107-20-4-100.compute-1.amazonaws.com
    Step 4: Now try to ssh to EC2 instance that is on a private subnet without specifying the key, for example, try ssh ec2-user@ipaddress.

    Hope this will help.
Note: This solution is for Mac.

【讨论】:

这与超过 10 年的公认答案有何不同?

以上是关于在 Mac OSx 上通过 SSH 连接到 EC2 时出现权限错误的主要内容,如果未能解决你的问题,请参考以下文章

在 Mac 上通过终端连接到 EC2 实例

通过 ssh 将 EC2 连接到 Git

无法通过 SSH 连接到 EC2:权限被拒绝(公钥)

如果我的安全组在端口 22 上允许 TCP 并且没有网络访问控制列表,为啥我不能通过 SSH 连接到我的 EC2 实例?

通过 SSH 连接到 EBS 创建的 EC2 实例

允许用户使用密钥对通过 SSH 连接到 EC2 Linux 实例