启用UFW防火墙未开22端口,重启AWS EC2后无法连接如何解决?
解决EC2 Ubuntu启用UFW后未开22端口导致SSH无法连接的问题
以下是三种可行的恢复方法,按操作复杂度从低到高排序:
方法1:使用EC2串行控制台(推荐,前提是已启用)
- 登录AWS EC2管理控制台,选中目标实例,点击顶部的「连接」按钮
- 在连接选项中选择「串行控制台」标签,点击「连接」进入串行终端
- 使用实例的系统用户名(Ubuntu默认是
ubuntu)登录,若未设置密码,可通过之前关联的密钥对生成临时密码,或直接使用sudo权限操作 - 执行命令开放22端口并生效:
若不需要UFW,也可直接禁用:sudo ufw allow 22/tcp sudo ufw reloadsudo ufw disable - 操作完成后即可正常通过SSH连接实例
方法2:通过用户数据自动修复
- 选中目标EC2实例,点击「操作」→「实例设置」→「编辑用户数据」
- 在用户数据输入框中填入以下cloud-init脚本:
#!/bin/bash # 开放SSH端口 ufw allow 22/tcp # 重载UFW规则 ufw reload - 保存用户数据后,重启实例。系统启动时cloud-init会自动执行脚本,修复防火墙规则
- 重启完成后即可恢复SSH连接
方法3:挂载根卷到临时实例修改配置
如果前两种方法无法使用,可通过挂载磁盘的方式修改配置:
- 停止目标实例:选中实例,点击「操作」→「实例状态」→「停止」(注意:若实例使用非弹性公网IP,停止后IP会释放,需提前记录或绑定弹性IP)
- 分离根卷:进入「存储」→「卷」页面,找到目标实例的根卷,右键选择「分离卷」,确认操作
- 挂载到临时实例:启动一台正常运行的Ubuntu EC2实例(临时使用),在卷页面选中分离的根卷,点击「操作」→「附加卷」,选择临时实例,设置挂载点为
/dev/sdf(或其他未占用的设备名) - 登录临时实例并挂载磁盘:
# 创建挂载目录 sudo mkdir /mnt/recovery # 挂载分区(需确认分区号,可通过lsblk查看,通常为/dev/sdf1) sudo mount /dev/sdf1 /mnt/recovery - 修改UFW配置:
- 方式一:直接禁用UFW:编辑
/mnt/recovery/etc/ufw/ufw.conf,将ENABLED=yes改为ENABLED=no - 方式二:添加22端口规则:编辑
/mnt/recovery/etc/ufw/user.rules,在合适位置添加一行:### tuple ### allow tcp 22 0.0.0.0/0 any 0.0.0.0/0
- 方式一:直接禁用UFW:编辑
- 卸载并恢复卷:
回到卷页面,分离该卷,重新附加到原EC2实例,启动原实例即可恢复SSH连接sudo umount /mnt/recovery
内容的提问来源于stack exchange,提问作者M.Novian Noor Islamy
相关产品推荐
相关产品推荐

