You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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:将问题磁盘挂载到临时实例

控制台操作:

  1. 进入临时实例的详情页,点击「编辑」
  2. 滚动到「附加磁盘」部分,点击「添加磁盘」
  3. 在「磁盘」下拉菜单中选择问题实例的启动盘,确保「模式」设为「读写」,然后保存

命令行操作:

gcloud compute instances attach-disk temp-fix-instance --disk [问题磁盘名称] --zone [区域] --mode read-write

步骤4:登录临时实例并修改磁盘内的UFW配置

  1. SSH登录临时实例:

    gcloud compute ssh temp-fix-instance --zone [区域]
    
  2. 查看挂载的磁盘设备:

    lsblk
    

    你会看到类似/dev/sdb的设备(临时实例的启动盘通常是/dev/sda),其下的/dev/sdb1是根分区

  3. 创建挂载点并挂载磁盘:

    sudo mkdir /mnt/problem-disk
    sudo mount /dev/sdb1 /mnt/problem-disk
    
  4. 禁用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
    
  5. (可选)解决串口登录无密码问题:
    如果你之后想通过串口登录,可以给你的用户设置密码:

    sudo chroot /mnt/problem-disk passwd [你的用户名]
    

步骤5:卸载磁盘并恢复原实例

  1. 卸载挂载的磁盘:
    sudo umount /mnt/problem-disk
    
  2. 将磁盘从临时实例分离:
    • 控制台:编辑临时实例,移除附加的问题磁盘
    • 命令行:
      gcloud compute instances detach-disk temp-fix-instance --disk [问题磁盘名称] --zone [区域]
      
  3. 将磁盘重新附加到原实例(必须设为启动盘):
    • 控制台:编辑原实例,添加磁盘,选择问题磁盘并勾选「启动盘」选项
    • 命令行:
      gcloud compute instances attach-disk [问题实例名称] --disk [问题磁盘名称] --zone [区域] --boot
      
  4. 启动原实例:
    gcloud compute instances start [问题实例名称] --zone [区域]
    

完成后,你应该就能正常通过SSH连接到原实例了。

内容的提问来源于stack exchange,提问作者Diogo Hartmann

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 07:02:57