EC2实例配置CodePipeline后突发无法SSH连接故障求助
EC2实例配置CodePipeline/CodeDeploy后突发SSH连接故障排查
已确认排除的故障项
- 密钥对有效性:原实例密钥、替换的全新密钥均验证有效,挂载磁盘到正常实例核查
.ssh/authorized_keys文件内容无异常 - 基础网络与实例状态:实例访问IP正确、安全组已放通全流量、实例运行状态正常
- 镜像复现特征:基于故障实例创建AMI启动新实例,无论使用原密钥还是全新密钥对,均复现相同SSH连接故障
- 故障关联规律:两台故障实例均在配置CodeDeploy/CodePipeline流水线后1-2天突发断连,故障前SSH可正常访问,首台故障实例ID为
i-036dfa448ef7cc321
高概率根因排查优先级排序
1. 第一优先级:核查文件系统权限(匹配所有故障特征)
SSH服务对认证相关路径的权限有强制安全校验,任意一项不符合要求就会直接拒绝公钥认证,客户端不会返回明确的权限类报错,且权限错误会被固化到AMI中,完全符合“换密钥、用故障AMI开新实例仍复现”的故障特征。
将故障实例系统卷挂载到正常实例后,依次核查以下路径权限:
- 根目录
/权限不能为777,默认应为755 - 登录用户家目录(Amazon Linux默认是
/home/ec2-user/、Ubuntu默认是/home/ubuntu/)权限必须为700,属主为对应登录用户,不能归属root或其他用户 - 家目录下
.ssh目录权限必须为700,属主为对应登录用户 .ssh/authorized_keys文件权限必须为600,属主为对应登录用户/etc/ssh/目录下所有配置文件权限必须为644,属主为root,不能有全局可写权限
重点核查CodeDeploy的appspec.yml中所有生命周期钩子脚本:这类脚本默认以root权限执行,如果存在递归修改权限的命令(比如路径写错的chmod -R 777、chown -R操作扫到了家目录、/etc/ssh目录甚至根目录),会直接触发SSH认证失败,这是CodeDeploy部署后突发SSH断连的最高发原因。
2. 第二优先级:核查sshd服务配置与系统内部防火墙
外层安全组放通不代表实例内部配置无异常,需重点核查:
- 打开故障卷内的
/etc/ssh/sshd_config文件,确认PubkeyAuthentication为yes、AuthorizedKeysFile路径为.ssh/authorized_keys、没有配置错误的AllowUsers/DenyUsers规则拦截登录用户 - 核查故障卷内的
/etc/hosts.allow、/etc/hosts.deny文件,确认没有误加SSH拦截规则 - 核查实例内部防火墙规则(iptables/firewalld/ufw),确认22端口入站规则没有被CodeDeploy的脚本、自动系统补丁更新重置拦截。如果开启了SELinux,还要核查
.ssh目录的SELinux上下文是否正确,上下文异常时可以通过restorecon -Rv /home/[登录用户]/.ssh修复。
3. 第三优先级:核查磁盘空间与系统日志
- 确认故障实例系统卷使用率未达到100%,根分区占满后sshd无法生成临时认证文件,会直接拒绝所有连接
- 查看故障卷内的SSH认证日志:Amazon Linux/RHEL系日志路径为
/var/log/secure,Debian/Ubuntu系为/var/log/auth.log,直接搜索sshd相关报错行,会明确标注连接被拒绝的具体原因,比如权限不符、配置加载失败、模块异常等。
内容的提问来源于stack exchange,提问作者Rivka Chany Moskovits
相关产品推荐
相关产品推荐

