升级RHEL后通过AMI创建的EC2实例SSH连接被拒绝求助
RHEL 8.7 EC2实例SSH连接被拒绝(Connection refused)排查与解决
问题背景
通过以下流程创建的RHEL 8.7 EC2实例无法通过SSH连接,报错:ssh: connect to host xx.xx.xx.xx port 22: Connection refused
操作流程:
- 创建RHEL 8.4版本EC2实例
- 将实例升级至RHEL 8.7
- 基于该实例创建AMI
- 使用该AMI启动新实例
已确认:安全组/网络ACL已开放22端口,原实例sshd服务运行正常。
排查与解决步骤
1. 确认新实例中sshd服务是否正常启动
原实例sshd正常不代表AMI生成的新实例会自动启动服务,可通过以下方式排查:
- 查看EC2系统日志:进入EC2控制台,选中目标实例,点击「监控」→「获取系统日志」,搜索
sshd关键词,检查是否有启动失败、配置错误的日志(如sshd: error: bad configuration option) - 若服务未开机自启,可通过EC2串行控制台(已启用前提下)登录实例,执行:
systemctl enable --now sshd
2. 检查sshd配置文件兼容性
RHEL版本升级后,sshd配置可能存在过时参数,导致新实例启动失败:
- 查看配置文件
/etc/ssh/sshd_config,重点排查:- 是否存在RHEL 8.7 sshd版本不再支持的旧参数
PubkeyAuthentication是否设为yes(密钥登录场景)、PermitRootLogin等参数是否符合登录需求
- 修复操作:
- 备份原配置:
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak - 恢复默认配置:执行
dnf reinstall openssh-server -y,覆盖为RHEL 8.7默认的sshd配置 - 重启服务:
systemctl restart sshd
- 备份原配置:
3. 排查SELinux策略限制
RHEL升级后SELinux策略更新,可能导致sshd端口或文件权限被阻止:
- 查看SELinux审计日志:
grep sshd /var/log/audit/audit.log,检查是否有denied类型的记录 - 修复操作:
- 临时关闭SELinux测试:
setenforce 0,若此时能SSH连接,说明是SELinux问题 - 永久修复:恢复sshd默认端口上下文或文件权限:
semanage port -a -t ssh_port_t -p tcp 22 restorecon -Rv /etc/ssh
- 临时关闭SELinux测试:
4. 重新生成合规AMI
创建AMI时原实例未正常关机,可能导致文件系统不一致:
- 正确生成AMI步骤:
- 登录原RHEL 8.7实例,执行
shutdown -h now正常关机 - 在EC2控制台选中已关机的实例,创建AMI并勾选「停止实例」选项
- 使用新生成的AMI启动实例,再尝试SSH连接
- 登录原RHEL 8.7实例,执行
内容的提问来源于stack exchange,提问作者Shiva Subramaniam
相关产品推荐
相关产品推荐

