本机连接aws的ec2时报错:所选用户的用户密钥未在远程主机上注册

引言

由于工作的需要,所以需要去学习下AWS相关的知识,所以自己注册了一个AWS的账号去进行学习。

问题发现

按照启动ec2实例的步骤:选择镜像->选择系统配置->配置密钥对->配置安全组->设置存储卷大小->启动实例

在上述操作完成后,等待EC2的实例状态变为正在运行,我就在本机使用xshell去进行连接了,但是连接时出现了如下错误:

image-20230513001511946

在网上寻找了许多资料,都没找到相关的,大部分都是说啥登录用户名之错误类的。后来经过使用本机的ssh去进行登录,发现其报错如下:

image-20230513001739097

问题解决

在官网提供的连接问题排查示例中找到了使用ssh报错相关的解决方案,其详细信息如下:

必须保护您的私钥文件,防止其他任何用户对其进行读写操作。如果除您外其他任何人都能够读取或写入您的私钥,则 SSH 会忽略您的密钥,并且您会看到以下警告消息。

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0777 for '.ssh/my_private_key.pem' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
bad permissions: ignore key: .ssh/my_private_key.pem
Permission denied (publickey).

如果在尝试登录到您的实例时看到类似的消息,请检查此错误消息的第一行,验证您为实例使用的公钥是否正确。上述示例利用 .ssh/my_private_key.pem 文件权限使用私钥 0777,这可使任何人都能读取或写入此文件。此权限级别非常不安全,因此 SSH 会忽略此密钥。

如果从 MacOS 或 Linux 连接,请运行以下命令以修复此错误,替入您的私有密钥文件的路径。

[ec2-user ~]$ chmod 0400 .ssh/my_private_key.pem

如果要从 Windows 连接,请在您的本地计算机上执行以下步骤。

  1. 导航到您的 .pem 文件。
  2. 右键单击 .pem 文件并选择 Properties (属性)
  3. 选择安全性选项卡。
  4. 选择 Advanced (高级)
  5. 验证您是否是文件的所有者。如果不是,请将所有者更改为您的用户名。
  6. 选择 Disable inheritance (禁用继承)Remove all inherited permissions from this object (从此对象中删除所有继承的权限)
  7. 选择 Add (添加)Select a principal (选择委托人),输入您的用户名,然后选择 OK (确定)
  8. Permission Entry (权限条目) 窗口,授予 Read (读取) 权限,然后选择 OK (确定)
  9. 单击 Apply(应用)以确保所有设置都已保存。
  10. 选择 OK (确定) 关闭 Advanced Security Settings (高级安全设置) 窗口。
  11. 选择 OK (确定) 关闭 Properties (属性) 窗口。
  12. 您应该能够通过 SSH 从 Windows 连接到 Linux 实例。

从 Windows 命令提示符处运行以下命令。

  1. 在命令提示符下,导航到 .pem 文件的文件路径位置。

  2. 运行以下命令以重置和删除显式权限:

    icacls.exe $path /reset
    
  3. 运行以下命令以向当前用户授予读取权限:

    icacls.exe $path /GRANT:R "$($env:USERNAME):(R)"
    
  4. 运行以下命令以禁用继承并删除继承的权限。

    icacls.exe $path /inheritance:r
    
  5. 您应该能够通过 SSH 从 Windows 连接到 Linux 实例。

通过这种方式可以通过SSH从windows连接到Linux实例了,但是还是无法在Xshell中去进行连接。

经过一段时间的排查,发现是由于EC2的实例镜像的问题导致的无法使用Xshell连接,在更换EC2镜像后就可以使用Xshell去进行连接了。

image-20230515170813827

猜你喜欢

转载自blog.csdn.net/qq_49137582/article/details/130688737