我丢失了私有密钥。我怎样才能连接到我的 Linux 实例?

本文详细介绍了在丢失EBS支持的Linux实例私有密钥时,如何通过创建新密钥对、停止原始实例、启动临时实例、修改授权文件等步骤,重新获取对实例的访问权限。此过程不适用于根设备为实例存储的实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如果丢失由 EBS 支持的实例的私有密钥,您可以重新获取对您的实例的访问权限。您必须停止实例,分离卷并将其作为数据卷附加到另一个实例,然后使用新的公有密钥修改 authorized_keys 文件,将卷移回原始实例,并重启实例。有关启动、连接和停止实例的更多信息,请参阅 实例生命周期

此过程仅支持具有 EBS 根卷的实例。如果根设备是实例存储卷,则无法使用此过程重新获得对实例的访问权限;您必须拥有私有密钥才能连接到实例。要确定实例的根设备类型,请打开 Amazon EC2 控制台,选择实例,选择相应实例,然后选择存储选项卡,检查根设备详细信息部分中的根设备类型的值。

该值为 EBS 或 INSTANCE-STORE

如果丢失私有密钥,除以下步骤外,还有其他方法可以连接到 Linux 实例。有关更多信息,请参阅如果我在 SSH 密钥对初始启动后丢失,该如何连接到 Amazon EC2 实例?

使用不同的密钥对连接由 EBS 支持的实例的步骤

步骤 1:创建新的密钥对

使用 Amazon EC2 控制台或第三方工具创建新的密钥对。如果您要将新密钥对的名称设置为与丢失的私有密钥相同的名称,则必须先删除现有密钥对。有关创建新密钥对的信息,请参阅使用 Amazon EC2 创建密钥对使用第三方工具创建密钥对,并将公有密钥导入 Amazon EC2

步骤 2:获取有关原始实例及其根卷的信息

请记下以下信息,因为您需要它来完成此过程。

获取有关原始实例的信息

  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

  2. 在导航窗格中选择 Instances (实例),然后选择要连接到的实例。(我们将此称为原始实例。)

  3. 在 Details(详细信息)选项卡上,记下实例 ID 和 AMI ID。

  4. 在 Networking(网络)选项卡上,记下可用区。

  5. 在 Storage(存储)选项卡的 Root device name(根设备名称)下,记下根卷的设备名称(例如 /dev/xvda)。然后,在 Block devices(块存储设备)下,查找此设备的名称并记下卷 ID(例如 vol-0a1234b5678c910de)。

步骤 3:停止原始实例

依次选择实例状态停止实例。如果此选项处于禁用状态,则表示实例已停止,或者其根设备是实例存储卷。

警告

当您停止某个实例时,任何实例存储卷上的数据都将被擦除。要保留实例存储卷中的数据,请确保将其备份到持久性存储中。

步骤 4:启动临时实例

  • New console
  • Old console

启动临时实例

  1. 在导航窗格中,选择 Instances(实例),然后选择 Launch instances(启动实例)。

  2. 在 Name and tags(名称和标签)部分,对于 Name(名称),输入 Temporary(临时)。

  3. 在 Application and OS Images(应用程序和操作系统映像)部分中,选择您启动原始实例时所用的 AMI。如果此 AMI 不可用,您可以创建一个可在已停止的实例中使用的 AMI。有关更多信息,请参阅 创建一个由 Amazon EBS 支持的 Linux AMI 。

  4. 在 Instance type(实例类型)部分中,保留默认的实例类型。

  5. 在 Key pair(密钥对)部分中,对于 Key pair name(密钥对名称),选择现有密钥对进行使用或创建新密钥对。

  6. 在 Network settings(网络设置)部分,选择 Edit(编辑),然后为 Subnet(子网),选择与原始实例位于同一可用区的子网。

  7. 在 Summary(摘要)面板中,选择 Launch(启动)。

步骤 5:从原始实例中分离根卷并将其附加到临时实例

  1. 在导航窗格中,选择 Volumes(卷),并选择原始实例的根设备卷(您已在上一步骤中记下它的卷 ID)。依次选择 Actions(操作)、Detach Volume(分离卷),然后选择 Detach(分离)。等待卷的状态变为 available。(您可能需要选择 Refresh (刷新) 图标。)

  2. 如果卷仍保持选中状态,则选择 Actions(操作),然后选择 Attach Volume(附加卷)。选择临时实例的实例 ID,记下在 Device name(设备名称)下指定的设备名称(例如 /dev/sdf),然后选择 Attach volume(附加卷)。

    注意

    如果已从 Amazon Web Services Marketplace AMI 启动原始实例,并且卷包含 Amazon Web Services Marketplace 代码,则必须先停止临时实例,然后才能附加卷。

步骤 6:将新的公钥添加到已安装到临时实例的原始卷上的 authorized_keys

  1. 连接到临时实例。

  2. 在临时实例中,挂载附加到实例的卷以访问其文件系统。例如,如果设备名称为 /dev/sdf,请使用以下命令将卷挂载为 /mnt/tempvol

    注意

    您的实例上显示的设备名称可能不同。例如,作为 /dev/sdf 挂载的设备可能在实例上显示为 /dev/xvdf。某些版本的 Red Hat(或其变体,如 CentOS)甚至可能将尾部字母增加 4 个字符,其中 /dev/sdf 成为 /dev/xvdk

    1. 使用 lsblk 命令确定卷是否已分区。

       

      [ec2-user ~]$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT xvda 202:0 0 8G 0 disk └─xvda1 202:1 0 8G 0 part / xvdf 202:80 0 101G 0 disk └─xvdf1 202:81 0 101G 0 part xvdg 202:96 0 30G 0 disk

      在前一个示例中,/dev/xvda 和 /dev/xvdf 是分区卷,而 /dev/xvdg 不是。如果您的卷已分区,则应在后续步骤中挂载分区 (/dev/xvdf1)),而不是原始设备 (/dev/xvdf)。

    2. 创建临时目录以挂载卷。

       

      [ec2-user ~]$ sudo mkdir /mnt/tempvol
    3. 使用之前确定的卷名称或设备名称在临时挂载点挂载卷(或分区)。所需命令取决于操作系统的文件系统。请注意,您的实例上显示的设备名称可能不同。有关更多信息,请参阅步骤 6 中的 note

      • Amazon Linux、Ubuntu 和 Debian

         

        [ec2-user ~]$ sudo mount /dev/xvdf1 /mnt/tempvol
      • Amazon Linux 2、CentOS、SUSE Linux 12 和 RHEL 7.x

         

        [ec2-user ~]$ sudo mount -o nouuid /dev/xvdf1 /mnt/tempvol

    注意

    如果您收到说明文件系统受损的错误,请运行以下命令以使用 fsck 实用程序检查文件系统并修复任何问题:

     

    [ec2-user ~]$ sudo fsck /dev/xvdf1
  3. 在临时实例中,借助临时实例 authorized_keys 中的新公有密钥,在已挂载卷上使用以下命令更新 authorized_keys

    重要

    以下示例使用 Amazon Linux 用户名 ec2-user。您可能需要使用其他用户名来替换,例如对于 Ubuntu 实例为 ubuntu

     

    [ec2-user ~]$ cp .ssh/authorized_keys /mnt/tempvol/home/ec2-user/.ssh/authorized_keys

    如果复制成功,则可以转到下一步骤。

    (可选)如果您没有权限编辑 /mnt/tempvol 中的文件,您必须使用 sudo 更新文件,然后检查文件的权限,以验证您是否能够登录原始实例。请使用以下命令检查文件权限。

     

    [ec2-user ~]$ sudo ls -l /mnt/tempvol/home/ec2-user/.ssh total 4 -rw------- 1 222 500 398 Sep 13 22:54 authorized_keys

    在这个输出示例中,222 是用户 ID;500 是组 ID。接下来,请使用 sudo 重新运行失败的复制命令。

     

    [ec2-user ~]$ sudo cp .ssh/authorized_keys /mnt/tempvol/home/ec2-user/.ssh/authorized_keys

    再次运行以下命令以确定权限是否已更改。

     

    [ec2-user ~]$ sudo ls -l /mnt/tempvol/home/ec2-user/.ssh

    如果用户 ID 和组 ID 已经更改,请使用以下命令进行恢复。

     

    [ec2-user ~]$ sudo chown 222:500 /mnt/tempvol/home/ec2-user/.ssh/authorized_keys

步骤 7:从临时实例中卸载并分离原始卷,然后将其重新附加到原始实例

  1. 在临时实例中,卸载已附加的卷,以将其重新附加到原始实例。例如,使用以下命令卸载 /mnt/tempvol 处的卷。

     

    [ec2-user ~]$ sudo umount /mnt/tempvol
  2. 从临时实例中分离卷(您在上一步中卸载了该卷):从 Amazon EC2 控制台,在导航窗格中选择 Volumes(卷),为原始实例选择根设备卷(您在上一步中记下了卷 ID),依次选择 Actions(操作)、Detach volume(分离卷),然后选择 Detach(分离)。等待卷的状态变为 available。(您可能需要选择 Refresh (刷新) 图标。)

  3. 将卷重新附加到原始实例:在卷仍保持选中状态时,选择 Actions(操作),然后选择 Attach Volume(附加卷)。选择原始实例的实例 ID,请指定您以前在步骤 2 中记下的原始根设备附加的设备名称(/dev/sda1 或 /dev/xvda),然后选择 Attach volume(附加卷)。

    重要

    如果您不指定与原始附加相同的设备名称,则无法启动原始实例。Amazon EC2 要求根设备卷位于 sda1 或者 /dev/xvda

步骤 8:使用新密钥对连接到原始实例

选择原始实例,然后依次选择实例状态启动实例。在实例进入 running 状态后,您可以使用新密钥对的私有密钥文件连接到该实例。

注意

如果您的新密钥对和相应私有密钥文件的名称不同于原始密钥对的名称,请确保在连接到实例时指定新私有密钥文件的名称。

步骤 9:清除

(可选) 如果您将不再使用临时实例,可以将其终止。选择临时实例,然后依次选择 Instance State(实例状态)和 Terminate instance(终止实例)。

【注】本文转载于:排查实例的连接问题。 - Amazon Elastic Compute Cloud

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值