安装Docker后EC2实例SSH连接超时无法登录问题咨询
问题根因
该现象的核心原因是Docker安装或启动过程中修改了系统iptables规则,覆盖了云平台默认放通SSH 22端口的配置。云厂商实例的默认安全组规则仅在机房网关层放通22端口,实例系统内部的iptables默认允许所有入站流量,Docker安装时会自动在iptables中插入自定义规则,一旦规则配置优先级高于默认放行规则,就会阻断22端口的入站请求,最终导致SSH连接超时。
临时恢复SSH连接
如果使用的是AWS等云平台,先通过云平台自带的实例控制台登录入口(AWS对应EC2 Instance Connect/会话管理器,国内云厂商对应VNC远程连接/工作区远程登录)直接登录实例,该登录方式走云厂商内部链路,不需要通过公网SSH:
- 登录后执行以下命令清空异常iptables规则,临时恢复公网SSH访问:
sudo iptables -F sudo iptables -P INPUT ACCEPT sudo iptables -P FORWARD ACCEPT
- 上述配置重启后会失效,恢复SSH连接后需要完成后续永久配置。
永久修复方案
方案1:提前配置iptables永久放通22端口
在安装Docker之前先执行以下操作,确保22端口放行规则优先级高于Docker自动生成的规则:
- Ubuntu 20环境下:
- 安装规则持久化工具:
sudo apt install iptables-persistent -y - 添加22端口放行规则:
sudo iptables -I INPUT -p tcp --dport 22 -j ACCEPT - 保存规则实现重启生效:
sudo netfilter-persistent save
- 安装规则持久化工具:
- Amazon Linux环境下:
- 添加22端口放行规则:
sudo iptables -I INPUT -p tcp --dport 22 -j ACCEPT - 保存规则实现重启生效:
sudo service iptables save
- 添加22端口放行规则:
方案2:禁用Docker自动修改iptables(仅适用于不需要将Docker容器端口映射到公网的场景)
- 编辑Docker配置文件
/etc/docker/daemon.json,添加如下配置:
{ "iptables": false }
- 重启Docker服务让配置生效:
sudo systemctl restart docker
预装Docker的AMI异常处理
如果使用Redash等预装Docker的AMI启动实例后直接无法SSH,无需重新制作镜像,在云平台控制台的实例启动参数中,添加用户数据(User Data) 脚本即可,实例首次启动时会自动执行脚本放通22端口:
#!/bin/bash iptables -I INPUT -p tcp --dport 22 -j ACCEPT netfilter-persistent save || service iptables save
使用上述配置重新启动实例即可正常通过SSH登录。
内容的提问来源于stack exchange,提问作者Shay
相关产品推荐
相关产品推荐

