AWS EC2实例重启后SSH/SFTP连接失败的全面排查指南

在AWS云环境中,EC2实例重启后无法通过SSH或SFTP连接是一个常见问题。本文将从多个维度分析可能的原因,并提供详细的解决方案。

问题现象

  • SSH客户端连接超时或连接被拒绝

  • SFTP工具无法建立连接

  • 实例状态显示运行中但网络不可达

简单排查:可能是安全组、网络ACL或实例配置问题导致连接失败。建议检查安全组入站规则、网络连接和实例状态。

系统化排查流程

1. 基础状态检查

1.1 实例状态验证

通过AWS CLI检查实例状态

bash 复制代码
aws ec2 describe-instances --instance-ids i-1234567890abcdef0 --query 'Reservations[0].Instances[0].State.Name'

确保实例状态为 running ,而不是 stoppedstoppingpending

1.2 系统状态检查

在AWS控制台中检查:

  • 系统状态检查:验证底层硬件问题

  • 实例状态检查:验证操作系统级别问题

2. 网络配置排查

2.1 安全组配置检查

安全组必须允许SSH流量(端口22):

确保有以下规则:

  • 类型:SSH

  • 协议:TCP

  • 端口范围:22

  • 来源:您的IP地址或 0.0.0.0/0(临时测试)

2.2 网络ACL检查

检查子网的网络ACL是否阻止SSH流量:

bash 复制代码
# 查看网络ACL规则
aws ec2 describe-network-acls --filters "Name=association.subnet-id,Values=subnet-12345678" --query 'NetworkAcls[0].Entries'

确保入站和出站规则都允许SSH流量。

2.3 路由表验证
bash 复制代码
# 检查路由表
aws ec2 describe-route-tables --filters "Name=association.subnet-id,Values=subnet-12345678"

确保有指向互联网网关或NAT设备的路由。

3. 实例级别排查

3.1 使用EC2 Instance Connect测试

如果启用了EC2 Instance Connect:

bash 复制代码
# 通过Instance Connect连接
aws ec2-instance-connect send-ssh-public-key \
    --instance-id i-1234567890abcdef0 \
    --availability-zone us-east-1a \
    --instance-os-user ec2-user \
    --ssh-public-key file://my_key.pub
3.2 使用Session Manager连接(无需SSH)

通过AWS Systems Manager Session Manager访问实例:

bash 复制代码
# 启动会话
aws ssm start-session --target i-1234567890abcdef0

前提条件

  • 实例已安装SSM Agent

  • 实例具有适当的IAM角色

4. 操作系统级别问题排查

4.1 检查SSH服务状态

通过Session Manager连接后:

bash 复制代码
# 检查SSH服务状态
sudo systemctl status sshd
sudo systemctl status ssh

# 如果服务停止,启动服务
sudo systemctl start sshd
sudo systemctl enable sshd

# 检查SSH配置
sudo cat /etc/ssh/sshd_config | grep -v "^#" | grep -v "^$"
4.2 检查磁盘空间
bash 复制代码
# 检查磁盘使用情况
df -h

# 检查根分区是否已满
du -sh /var/log/*
4.3 检查系统日志
bash 复制代码
# 查看系统日志
sudo tail -f /var/log/messages
sudo journalctl -u sshd -f

# 检查cloud-init日志
sudo cat /var/log/cloud-init.log
sudo cat /var/log/cloud-init-output.log

5. 弹性IP与网络接口

5.1 检查弹性IP关联
bash 复制代码
# 查看弹性IP关联
aws ec2 describe-addresses --filters "Name=instance-id,Values=i-1234567890abcdef0"
5.2 检查网络接口
bash 复制代码
# 查看网络接口详情
aws ec2 describe-network-interfaces --filters "Name=attachment.instance-id,Values=i-1234567890abcdef0"

6. 高级故障排除

6.1 使用VPC Reachability Analyzer
bash 复制代码
# 创建路径分析
aws ec2 create-network-insights-path \
    --source i-1234567890abcdef0 \
    --destination-port 22 \
    --protocol tcp

# 启动分析
aws ec2 start-network-insights-analysis \
    --network-insights-path-id <path-id>
6.2 检查实例元数据
bash 复制代码
# 从实例内部获取元数据(通过Session Manager)
curl http://169.254.169.254/latest/meta-data/
问题2:磁盘空间不足

解决方案

bash 复制代码
# 清理日志文件
sudo journalctl --vacuum-size=100M
sudo rm -f /var/log/*.log.*
sudo truncate -s 0 /var/log/*.log

# 清理包缓存
sudo yum clean all  # Amazon Linux
sudo apt clean     # Ubuntu
问题3:文件系统错误

解决方案

  1. 停止实例

  2. 分离根卷

  3. 挂载到临时实例进行修复

  4. 重新挂载并启动原实例

8. 预防措施

8.1 创建自定义AMI

定期创建已知良好的AMI备份:

bash 复制代码
aws ec2 create-image \
    --instance-id i-1234567890abcdef0 \
    --name "Production-Server-Backup-$(date +%Y%m%d)" \
    --description "Backup before maintenance"
8.2 使用启动模板和用户数据
bash 复制代码
#!/bin/bash
# 用户数据脚本 - 自动修复常见问题
yum update -y
systemctl enable sshd
echo "fs.file-max = 65536" >> /etc/sysctl.conf
sysctl -p
8.3 监控和告警

设置CloudWatch告警:

  • CPU使用率

  • 磁盘空间

  • 网络流量

  • 状态检查失败

总结

当AWS EC2实例重启后无法SSH连接时,建议按照以下顺序排查:

  1. 基础状态:实例运行状态和系统检查

  2. 网络配置:安全组、网络ACL、路由表

  3. 实例访问:使用Session Manager或EC2 Instance Connect

  4. 操作系统:SSH服务状态、磁盘空间、系统日志

  5. 高级诊断:VPC Reachability Analyzer

  6. 急速开户:https://mycloudpartners.com/https://mycloudpartners.com/

相关推荐
落笔画忧愁e1 小时前
实测:利用腾讯云锐驰型 200M 带宽,搭建无门槛高清视频分发系统
云计算·腾讯云
Kiyra2 小时前
虚拟机假死?SSH 能连却卡 Logo 界面
运维·ssh
冬天的风滚草3 小时前
揭秘云原生混布资源调度器Koordinator (十五)GPU 信息采集与上报机制
云计算
冬天的风滚草3 小时前
揭秘云原生混布资源调度器Koordinator (十三)GPU 资源管理总览
云计算
冬天的风滚草3 小时前
揭秘云原生混布资源调度器Koordinator (十四)DeviceShare 调度插件详解
云计算
谢平康3 小时前
ssh-copy-id 后还是一直需要密码登录的一个解决办法
运维·ssh
不染尘.6 小时前
Linux基本概述
linux·windows·centos·ssh
CodeCaptain6 小时前
阿里云ECS上配置Nginx的反向代理
nginx·阿里云·云计算
__雨夜星辰__6 小时前
VS Code 的Remote-SSH/Remote Development插件无法连接到 Ubuntu 系统下 的远程虚拟主机(VMware)
运维·vscode·ubuntu·ssh
有谁看见我的剑了?15 小时前
VMware OVF Tool 工具安装学习
云计算