我意外地在 Google Cloud Compute Debian 实例上启用了 UFW,不幸的是端口 22 现在已被阻止。我尝试了各种方法进入虚拟机,但都失败了。
我正在尝试通过串行端口访问,但它要求我输入从未设置的用户和密码。
有人知道我该怎么办吗?
答案1
这个答案展示了解决这个问题的两种方法。
第一种方法是创建一个禁用 UFW 的启动脚本。第二种方法是将启动磁盘附加到另一个实例并修改文件 /etc/ufw/ufw.conf
方法 1:
步骤1:
登录 Google Cloud Console。转到 Compute Engine -> VM 实例。单击您的实例。单击编辑按钮。
第2步:
向下滚动到“自定义元数据”部分。对于键,输入startup-script
。对于值,输入:
#! /bin/bash
/usr/sbin/ufw disable
单击保存按钮
步骤3:
重启实例。重启期间,启动脚本将运行并禁用 UFW 防火墙。使用 SSH 登录到您的实例。
步骤4:
重复步骤 2,但这次删除启动脚本。否则每次实例启动时防火墙都会被禁用。
方法 2:
步骤1:
关闭存在 UFW 问题的实例。登录 Google Cloud Console。转到 Compute Engine -> VM 实例。单击您的实例并记下“启动磁盘”名称。这将是“启动磁盘和本地磁盘”下的第一个磁盘。
第2步:
在执行任何进一步的操作之前,请先创建启动磁盘的快照。仍在 Compute Engine -> 磁盘中。单击您的启动磁盘。单击“创建快照”。
步骤3:
在同一个区域中创建一个新实例。微型实例即可工作。
步骤4:
打开 Cloud Shell 提示符(如果设置了 gcloud,也可以从桌面执行此操作)。执行此命令。将 NAME 替换为您的实例名称(损坏的系统),将 DISK 替换为启动磁盘名称,将 ZONE 替换为系统所在的区域:
gcloud compute instance detach-disk NAME --disk=DISK --zone=ZONE
确保前一个命令没有报错。
步骤5:
现在我们将此磁盘附加到您创建的新实例。
在连接第二个磁盘之前,请确保修复实例正在运行。如果多个磁盘可启动,实例有时会搞不清楚从哪个磁盘启动。
转到 Compute Engine -> VM 实例。单击您的实例。单击编辑。在“附加磁盘”下单击“添加项目”。对于名称,请输入/选择您从损坏的实例中分离的磁盘。单击保存。
步骤6:
通过 SSH 连接到已连接两个磁盘的新实例。
步骤7:
仔细按照以下步骤操作。我们将第二个磁盘挂载到根文件系统。然后更改 /mnt/repair/etc/ufw/ufw.conf 的内容以禁用防火墙。
- 成为超级用户。执行 sudo -s
- 执行 df。确保 /dev/sdb1 尚未挂载。
- 为挂载点创建目录:mkdir /mnt/repair
- 挂载第二块磁盘: mount /dev/sdb1 /mnt/repair
- 更改目录:cd /mnt/repair/etc/ufw
- 编辑 ufw.conf
- 改成
ENABLED=yes
ENABLED=no
- 关闭修复系统:halt
步骤8:
现在反转该过程并将第二个磁盘移回原始实例并使用以下命令重新连接。然后启动实例并通过 SSH 连接。
注意:要重新连接启动盘,您必须使用带有 -boot 选项的 gcloud。
gcloud beta compute instances attach-disk NAME --disk=DISK --zone=ZONE --boot