EC2 ssh 权限被拒绝(公钥、gssapi-keyex、gssapi-with-mic)

Posted

技术标签:

【中文标题】EC2 ssh 权限被拒绝(公钥、gssapi-keyex、gssapi-with-mic)【英文标题】:EC2 ssh Permission denied (publickey,gssapi-keyex,gssapi-with-mic) 【发布时间】:2016-03-03 16:31:09 【问题描述】:

当我想ssh 到我的ec2 主机时,我遇到了这个权限被拒绝的问题。我尝试了现有的解决方案chmod 600 "My.pem",但仍然没有用。这是我的调试信息:

debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 21: Applying options for *
debug1: Connecting to 54.223.47.74 [54.223.47.74] port 22.
debug1: Connection established.
debug1: key_load_public: No such file or directory
debug1: identity file My.pem type -1
debug1: key_load_public: No such file or directory
debug1: identity file My.pem-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.9
debug1: Remote protocol version 2.0, remote software version OpenSSH_6.6.1
debug1: match: OpenSSH_6.6.1 pat OpenSSH_6.6.1* compat 0x04000000
debug1: Authenticating to 54.223.47.74:22 as 'root'
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client chacha20-poly1305@openssh.com <implicit> none
debug1: kex: client->server chacha20-poly1305@openssh.com <implicit> none
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug1: Server host key: ecdsa-sha2-nistp256 SHA256:tfjxcE5kePSv1cJK7SWBp/56kgm2DQkyPLSLZ4d73Io
debug1: Host '54.223.47.74' is known and matches the ECDSA host key.
debug1: Found key in /Users/tan/.ssh/known_hosts:24
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: Roaming not allowed by server
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic
debug1: Next authentication method: publickey
debug1: Trying private key: My.pem
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic
debug1: No more authentication methods to try.
Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

【问题讨论】:

您作为 SSH 用户设置了什么?它是否与 ec2 机器上的用户匹配。可能是ubunturoot 我觉得应该是root,机器是redhat 7.1。我试过root和ec2-user ssh,都没有成功。 发布更详细的日志。您可以在命令行上指定更多 -v 选项。如果你有 web 控制台,还要检查服务器日志中的错误。 验证到 54.223.47.74:*22 *as 'root', ... 在 /Users/tan/.ssh/known_hosts 中找到密钥: 24, ... debug1: 服务器不允许漫游。看来您正在以root 身份连接,然后尝试以you 身份进行身份验证。 【参考方案1】:

终端错误解决方法

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

ssh-keygen -f " ~/.ssh/known_hosts" -R xx.xx.xxx.xxx

xx - ip 主机

http://pastebin.com/YpqGSJ2E

【讨论】:

【参考方案2】:

将用户添加到/etc/sshd_special_user

【讨论】:

【参考方案3】:

我通过使用命令在我的 centos 机器中解决了这个问题:

ssh -i <Your.pem> ec2-user@<YourServerIP>

这是关于 userName 的,在我的例子中是 ec2-user

引用自:AMAZONTroubleshooting

【讨论】:

有趣的是,当关闭连接时,AWS 本身返回了Please login as the user "ec2-user" rather than the user "root".,这很有效。 哦,太好了。现在他们已经实现了那个错误日志。早些时候它不在那里...... 这对我有帮助。是 AWS 建议的用户 ID 是 centos,导致了这个问题。 ec2-user 是正确的。顺便说一句,我没有收到 @frmbelz 所做的消息。【参考方案4】:

通过连接用户centos而不是ec2-user来解决。

【讨论】:

更一般地说,它是通过使用 AMI 的 正确 用户来解决的。您碰巧使用了启用 centos 的 AMI,但没有启用 ec2-user。您只需查看 AMI 文档即可知道什么是正确的。 (如果没有文档,请不要使用该 AMI。)【参考方案5】:

检查您是否在您的密钥所在的同一目录中。 我遇到了同样的问题,发现我尝试连接的目录格式错误

【讨论】:

【参考方案6】:
cd .ssh
rm authorized_keys

为您尝试访问的机器归档或编辑并删除已保存的密钥。

使用chmod 400 keyname 更改密钥文件的权限(确保keyname 与您在亚马逊上的完全匹配)。

ec2-user@IPaddress -i keypair.pem重试

【讨论】:

【参考方案7】:

在 Mac 上:

cd .ssh
sudo nano know_hosts

并删除有问题的主机信息。

【讨论】:

【参考方案8】:

最近我遇到了这个问题, 不小心我用chmod -R g+rw .更改了主页权限 它更改了.ssh 文件夹权限。

    如果没有任何结果, 在 Amazon-EC2 上创建临时实例 分离您的服务器存储(在此之前关闭您的源计算机) 将其挂载为临时实例中的辅助存储

    执行以下权限更改,

    [ec2-user ~]$ chmod 600 mount_point/home/ec2-user/.ssh/authorized_keys

    [ec2-user ~]$ chmod 700 mount_point/home/ec2-user/.ssh

    [ec2-user ~]$ chmod 700 mount_point/home/ec2-user

    从临时实例卸载源磁盘

    将其附加回源计算机

    现在使用相同的命令登录,

    ssh -i FileName.pem 用户名@MachineIP

更多详情请看AWS Trouble Shooting Docs

【讨论】:

【参考方案9】:

检查 selinux 是否阻止了对该文件的访问。

尝试以下方法:

restorecon -r -vv .ssh/authorized_keys

【讨论】:

【参考方案10】:

确保您位于 .pem 文件所在的同一目录中。

使用命令,chmod 0400 example.pem

然后使用命令,ssh -i example.pem ec2-user@YOUR-IP

【讨论】:

-i 选项采用路径。您的路径需要正确,但您绝对不需要在同一目录中。【参考方案11】:

确保ssh 命令指定了ec2 用户:

# ec2 user is missing
ssh -i <identity_file.pem> <hostname>
# ec2 user is specified
ssh -i <identity_file.pem> ec2-user@<hostname>

【讨论】:

ec2-user 已添加,但还是一样【参考方案12】:

我注意到每个 Linux 实例都使用默认的 Linux 系统用户帐户启动。这可能与 ec2-user 不同,具体取决于您的实例。您使用以下命令登录,其中DefaultUserName 代表下面引用的用户名。

ssh -i <Your.pem> <DefaultUserName>@<YourPublicServerIP>

每个 Linux 实例都使用默认的 Linux 系统用户帐户启动。默认用户名由您在启动实例时指定的 AMI 确定。

对于 Amazon Linux 2 或 Amazon Linux AMI,用户名为 ec2-user。 对于 CentOS AMI,用户名为 centos。 对于 Debian AMI,用户名为 admin。 对于 Fedora AMI,用户名为 ec2-userfedora。 对于 RHEL AMI,用户名为 ec2-userroot。 对于 SUSE AMI,用户名为 ec2-userroot。 对于 Ubuntu AMI,用户名为 ubuntu。 否则,如果 ec2-user 和 root 不起作用,请与 AMI 提供商联系。

【讨论】:

【参考方案13】:

您必须运行下面的命令以 ssh 到您的 ec2 主机

ssh -i <user.pem> ec2-user@<public ip>

如果有

WARNING: UNPROTECTED PRIVATE KEY FILE!          
Permissions 0644 for 'user.pem' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.

然后运行chmod 0400 &lt;user.pem&gt;

上面的命令运行后运行 ssh -i &lt;user.pem&gt; ec2-user@&lt;public ip&gt;

【讨论】:

【参考方案14】:

您可以在此处找到 ec2 实例的默认用户名: https://alestic.com/2014/01/ec2-ssh-username/

但如果您想查找实例的用户名: 点击连接按钮查看默认用户名。

找到用户名后,运行此命令,以确保您的密钥不公开可见。

chmod 400 <private-key-file.pem>

然后使用其公共 DNS 或 IP 连接到您的实例:

ssh -i <private-key-file.pem> ec2-user@<public ip>

【讨论】:

【参考方案15】:

除了这里提到的用户名问题之外,它很可能是一个问题。

实例的权限 实例上的公钥与您在 .pem 文件中本地可用的公钥不匹配。 以下链接方法 1 为我解决了它。 https://aws.amazon.com/premiumsupport/knowledge-center/ec2-linux-fix-permission-denied-errors/

对我来说,这是公钥不匹配。这就是我解决它的方法。我在带有 ssh 客户端的 Mac 上。

您可以通过运行以下命令从 .pem 文件中获取本地公钥:

ssh-keygen -y -f /path_to_key_pair/my-key-pair.pem

在您的实例上导航到您的授权密钥文件,该文件通常可以在此处找到:

/home/username/.ssh/authorized_keys

将您的公钥添加到此文件中。保存并完成。应该这样做。

我遇到这个问题的原因只是一点背景。我必须创建一个新的 .pem 文件,因为我在启动实例时丢失了下载的文件。出于安全原因,此文件无法再次下载。当我创建了一个新的 .pem 文件时,它用它创建了一个新的公钥。此公钥需要在实例上手动更新,因为 authorized_keys 文件仍指向旧公钥。

还有更正式的 9 步流程来进行排序。见这里。https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/replacing-lost-key-pair.html

【讨论】:

【参考方案16】:

我遇到了同样的问题并通过 -

解决了

    在Window机器中,将键保存到Pageant 见https://aws.amazon.com/es/blogs/security/securely-connect-to-linux-instances-running-in-a-private-amazon-vpc/

    然后在 Putty 中选择 SSH->Auth-> 勾选“允许代理转发”并将 ppk 文件放入“用于身份验证的私钥文件”中。

【讨论】:

【参考方案17】:

我遇到了同样的问题,就我而言,问题是文件“My.pem”应该由管理员用户创建

因此,解决方案是,首先使用 sudo 创建文件“My.pem”并将权限更改为 400

$ sudo su
$ sudo vim My.pem
  #paste the content

$ sudo vim chmod 400 My.pem

$ ssh -i My.pem user@host
  # Login ok

【讨论】:

【参考方案18】:

我遇到了同样的问题,但在我的情况下,这是因为我创建了一个新密钥以从不同的设备进行连接。只有在创建新实例时才会添加密钥对,如果要在创建实例后创建新密钥,则必须手动添加。

你可以在这里https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html#identify-key-pair-specified-at-launch

    ssh 使用您的旧密钥对进入 AWS 实例

    cd 进入~/.ssh 文件夹并

    使用nano 或任何你喜欢的方式打开authorized_keys 文件

    然后找到新的.pem 密钥对并使用

    检索公钥

    ssh-keygen -y -f /path_to_key_pair/my-key-pair.pem

    复制返回的公钥并将其粘贴到您的其他密钥下方的 authorized_keys 文件中,保存并退出。

    chmod 400 my-key-pair.pem 如果你还没有

    那么您应该可以使用新的密钥对进行连接了。

【讨论】:

【参考方案19】:

如果您在 mac 上使用终端 (.zsh) 通过 ssh 连接 ec2,那么您必须在所有命令中将名称从 .pem 更改为 .cer,因为在 mac 上,您下载的 key_pair 文件具有扩展名 .cer, 否则,您可以按照与 aws 上相同的命令进行操作。

【讨论】:

以上是关于EC2 ssh 权限被拒绝(公钥、gssapi-keyex、gssapi-with-mic)的主要内容,如果未能解决你的问题,请参考以下文章

SSH 到 EC2 实例期间权限被拒绝(公钥)[重复]

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

AWS EC2 的 SSH 问题 - 权限被拒绝:公钥

EC2 ssh 权限被拒绝(公钥、gssapi-keyex、gssapi-with-mic)

Amazon ec2 显示“权限被拒绝(公钥)”

Amazon EC2 实例“权限被拒绝(公钥)”