我对 EC2 实例的 sshd_config 文件进行了更改,现在我无法使用 SSH 访问我的实例。如何解决此问题?

上次更新时间:2020 年 11 月 18 日

我更改了 Amazon Elastic Compute Cloud (Amazon EC2) 实例的 sshd_config 文件,现在我无法使用 SSH 访问我的实例。如何进行故障排查并解决此问题?

简短描述

通过 SSH 建立连接时,更改实例的 sshd_config 文件可能会导致 connection refused错误。

为了确认由于 connection refused(连接被拒绝)错误而导致无法访问实例,请在详细消息打开的情况下通过 SSH 访问实例:

$ ssh -i "myawskey.pem" ec2-user@ec2-11-22-33-44.eu-west-1.compute.amazonaws.com -vvv

在上例中,使用 myawskey.pem 作为私钥文件,ec2-user@ec2.11.22.33.44 作为用户名。请用您的密钥文件和您的用户名替换示例中的密钥文件和用户名。确保您使用实例所在的区域。

以下示例输出显示了 connection refused(连接被拒绝)错误消息:

OpenSSH_7.9p1, LibreSSL 2.7.3
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 48: Applying options for *
debug1: Connecting to ec2-11-22-33-44.eu-west-1.compute.amazonaws.com port 22.
ssh: connect to host ec2-11-22-33-44.eu-west-1.compute.amazonaws.com port 22: Connection refused

要解决此问题:

1.   创建恢复实例并将受损实例的根卷挂载到恢复实例。

2.    更正或复制 sshd_config 文件。

3.    将卷重新附加到原始实例并测试连接。

解决方法

注意:如果您使用的是基于 Nitrote 的实例,则设备名称与以下步骤中给出的示例不同。例如,基于 Nitro 的实例上的设备名称是 /dev/nvme,而非 /dev/xvda/dev/sda1。有关更多信息,请参阅 Linux 实例上的设备命名

创建恢复实例并将受损实例的根卷挂载到恢复实例

1.    在虚拟私有云 (VPC) 中启动新 EC2 实例。在同一可用区中使用与受损实例相同的 Amazon 系统映像 (AMI)。新实例将成为您的恢复实例。

2.    停止受损的实例

注意:如果您使用存储支持的实例或拥有包含数据的实例存储卷,则在停止实例时,数据将会丢失。有关更多信息,请参阅确定实例的根设备类型

3.    从受损实例中分离 Amazon Elastic Block Store (Amazon EBS) 根卷/dev/xvda/dev/sda1)。

4.    将 EBS 卷作为辅助设备 (/dev/sdf) 附加到恢复实例。

5.    使用 SSH 连接到您的救援实例

6.    运行 lsblk 命令以查看设备:

$ 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   8G  0 disk
 └─xvdf1 202:81   0   8G  0 part

7.    为您在第 4 步中附加到恢复实例的新卷创建挂载点目录 (/recovery):

$ sudo mkdir /mnt/recovery

8.    将该卷挂载到您在第 7 步中创建的目录:

$ sudo mount -t xfs -o nouuid /dev/xvdf1 /mnt/recovery/

9.    再次运行 lsblk 命令以验证卷已挂载该目录:

$ 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   8G  0 disk
└─xvdf1 202:81   0   8G  0 part /mnt/recovery

更正或复制 sshd_config 文件

您可以调查受损实例上的 sshd_config 文件并回滚所做的更改。使用 SSH 详细消息输出将您引导到文件中的错误位置。

$ sudo vi /mnt/recovery/etc/ssh/sshd_config

或者,使用以下命令将 sshd_config 文件从恢复实例复制到受损实例。此命令替换原始实例上的 sshd_config 文件的内容。

$ sudo cp /etc/ssh/sshd_config /mnt/recovery/etc/ssh/sshd_config

将卷重新附加到原始实例并测试连接

1.    运行 umount 命令以卸载该卷:

$ sudo umount /mnt/recovery/

2.    将辅助卷从恢复实例分离,然后将该卷以 /dev/xvda(根卷)的形式附加到原始实例。

3.    启动实例

4.    使用 SSH 连接到实例以验证您是否可以访问该实例。


这篇文章对您有帮助吗?


您是否需要账单或技术支持?