用户报告他们无法通过 SSH 连接到 AWS 中的 EC2 实例?

slm*_*slm 1 ssh amazon-ec2 ssh-keys

用户正在执行以下操作:

$ ssh -i /Users/user1/key.pem centos@10.12.10.10
Run Code Online (Sandbox Code Playgroud)

尝试访问时收到的错误信息如下:

$ ssh -i /Users/user1/key.pem centos@10.12.10.10 
centos@10.12.10.10 : Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
Run Code Online (Sandbox Code Playgroud)

slm*_*slm 5

AWS 支持提供了针对此特定问题的新颖解决方案,我觉得有必要在这里分享它,因为我以前从未见过它。过去,我的大多数同事使用的方法是停止实例,然后将附加到它的 EBS 卷挂载到另一个 EC2 实例作为辅助卷,然后根据需要挂载和编辑它。

这些方法说明了传统方法:

使用用户数据

对我来说,这种新方法是#userdata用于在 EC2 实例启动时运行一系列命令。

  1. 在开始之前,请创建附加到您无法通过 SSH 连接的 EC2 的卷(卷 ID:vol-XXXX)的快照,以防万一。快照本质上是卷的备份。您可以在本文档中找到创建快照的步骤。
  2. 停止您的实例。
  3. 在控制台中,选择您的实例,转到操作 → 实例设置 → 查看/更改用户数据
  4. 在用户数据中,输入以下信息:
#cloud-config
bootcmd:
  - [ chmod, 700, /home/centos ]
  - [ chmod, 700, /home/centos/.ssh ]
  - [ chmod, 600, /home/centos/.ssh/* ]
  - [ chmod, 600, /etc/ssh/ssh_host_*_key ]
  - [ chmod, 711, /var/empty/sshd ]
  - [ chmod, 600, /home/centos/.ssh/authorized_keys ]
  - [ sh, -c, "chown -R centos:centos /home/centos" ]
Run Code Online (Sandbox Code Playgroud)
  1. 启动您的实例。

实例重启后,尝试通过 访问实例ssh

笔记

  • 上述用户数据脚本将纠正实例本身内的任何所有权和权限问题。
  • 如果您在使用上述用户数据脚本后仍然遇到问题,请告诉我,我会尽快回复您。
  • 如果之前的过程有效,请重复步骤 1-4 并从 User-Data 框中删除内容,以避免每次实例重新启动时再次重复该过程。