如何在Google Cloud Compute实例外部禁用UFW?端口22被封求助
解决GCP Debian实例UFW封禁SSH端口的问题
别担心,你提到的「Google Cloud不支持将磁盘挂载到另一个实例」其实是误解——GCP完全支持将问题实例的磁盘挂载到临时实例上修改配置,这正是解决你当前问题的标准方案。下面是详细的操作步骤:
步骤1:停止问题实例
首先必须停止出问题的虚拟机,因为磁盘只能在实例停止状态下被挂载到其他实例:
- 通过GCP控制台:找到你的实例,点击「停止」按钮
- 或者用gcloud命令行:
gcloud compute instances stop [你的问题实例名称] --zone [实例所在区域,比如us-central1-a]
步骤2:准备临时实例
你需要一个正常可访问的Debian实例(如果已经有可用的实例可以跳过这一步):
- 控制台创建:选择Debian镜像创建一个小型实例,确保和问题实例在同一个区域
- 命令行创建:
gcloud compute instances create temp-fix-instance --zone [同一区域] --image-family debian-11 --image-project debian-cloud
步骤3:将问题磁盘挂载到临时实例
控制台操作:
- 进入临时实例的详情页,点击「编辑」
- 滚动到「附加磁盘」部分,点击「添加磁盘」
- 在「磁盘」下拉菜单中选择问题实例的启动盘,确保「模式」设为「读写」,然后保存
命令行操作:
gcloud compute instances attach-disk temp-fix-instance --disk [问题磁盘名称] --zone [区域] --mode read-write
步骤4:登录临时实例并修改磁盘内的UFW配置
SSH登录临时实例:
gcloud compute ssh temp-fix-instance --zone [区域]查看挂载的磁盘设备:
lsblk你会看到类似
/dev/sdb的设备(临时实例的启动盘通常是/dev/sda),其下的/dev/sdb1是根分区创建挂载点并挂载磁盘:
sudo mkdir /mnt/problem-disk sudo mount /dev/sdb1 /mnt/problem-disk禁用UFW(最简单直接的方法):
编辑UFW的主配置文件,将启用状态改为no:sudo nano /mnt/problem-disk/etc/ufw/ufw.conf找到
ENABLED=yes,修改为ENABLED=no,保存退出(Ctrl+O,回车,Ctrl+X)如果你想保留UFW只开放22端口,可以直接添加允许SSH的规则到用户规则文件:
echo "-A ufw-user-input -p tcp --dport 22 -j ACCEPT" | sudo tee -a /mnt/problem-disk/etc/ufw/user.rules(可选)解决串口登录无密码问题:
如果你之后想通过串口登录,可以给你的用户设置密码:sudo chroot /mnt/problem-disk passwd [你的用户名]
步骤5:卸载磁盘并恢复原实例
- 卸载挂载的磁盘:
sudo umount /mnt/problem-disk - 将磁盘从临时实例分离:
- 控制台:编辑临时实例,移除附加的问题磁盘
- 命令行:
gcloud compute instances detach-disk temp-fix-instance --disk [问题磁盘名称] --zone [区域]
- 将磁盘重新附加到原实例(必须设为启动盘):
- 控制台:编辑原实例,添加磁盘,选择问题磁盘并勾选「启动盘」选项
- 命令行:
gcloud compute instances attach-disk [问题实例名称] --disk [问题磁盘名称] --zone [区域] --boot
- 启动原实例:
gcloud compute instances start [问题实例名称] --zone [区域]
完成后,你应该就能正常通过SSH连接到原实例了。
内容的提问来源于stack exchange,提问作者Diogo Hartmann
相关产品推荐
相关产品推荐

