讲解 AWS EC2 密钥对、公私钥关系、SSH 登录、私钥权限、丢失恢复、轮换和团队访问边界。
AWS EC2 密钥对由 AWS 保存的公钥和用户保管的私钥组成。Linux 通常用私钥完成 SSH 认证,Windows 可能用它解密管理员密码。AWS 不保存可供下载的私钥副本,丢失后不能重新下载同一把私钥。
不可逆点:AWS 只在创建密钥对时提供一次私钥下载,之后不能重新下载同一私钥。进入“EC2 → 网络和安全 → 密钥对”创建并妥善保存。私钥丢失不会删除数据,但可能失去 SSH 入口。替换前保留当前会话,先追加新公钥并验证,再删旧公钥。

密钥对与系统账户的关系
启动 Linux 实例时,所选公钥通常由初始化机制写入默认用户的 ~/.ssh/authorized_keys。密钥对名称存在于 EC2 控制面,不代表所有系统用户都自动获得该公钥。
首次连接前检查
- 实例已通过状态检查并存在可达网络入口;
- 安全组允许可信来源访问 TCP 22;
- 用户名匹配 AMI,例如不同发行版默认用户可能不同;
- 私钥文件完整,且本地权限足够严格;
- 目标公网 IP、Elastic IP 或堡垒机路径正确。
chmod 600 ./production.pem
ssh -i ./production.pem ec2-user@203.0.113.10
ssh -vvv -i ./production.pem ec2-user@203.0.113.10
按错误类型排查
| 现象 | 优先检查 |
|---|---|
| 连接超时 | 路由、安全组、网络 ACL、公网地址 |
| Connection refused | sshd 状态、监听端口、系统防火墙 |
| Permission denied | 用户名、私钥、公钥和目录权限 |
| Host key changed | 实例是否重建、IP 是否被重新分配 |
丢失私钥后的恢复
不要尝试从 AWS 恢复原私钥。可用路径取决于实例配置,包括 Systems Manager Session Manager、EC2 Instance Connect、已有管理员会话,或停止实例后把根卷挂载到救援实例修改 authorized_keys。动根卷前应创建快照并记录设备映射。
团队使用边界
不要多人共享一把长期私钥。优先使用 Session Manager、短期访问或每人独立公钥,并保留审计记录。删除 EC2 控制台中的密钥对,不会自动删除已写入实例的公钥。
先收紧私钥权限
确认文件是目标私钥,再执行:
chmod 600 /path/to/YOUR_KEY.pem ; ssh -i /path/to/YOUR_KEY.pem USER@PUBLIC_IP替换路径、用户名和地址。Ubuntu 常见用户是 ubuntu,其他镜像可能不同,不要默认 root。还需安全组允许你的固定来源访问 SSH。
按错误分流
- 超时:查公网地址、路由、安全组、ACL 和本地出口。
- 拒绝:网络已到主机,查 sshd 和系统防火墙。
Permission denied:查用户名、私钥、公钥文件权限和认证日志。- 格式错误:确认没有把公钥或网页内容当私钥。
安全替换
- 在现有会话备份
authorized_keys并追加新公钥。 - 修正目录和文件权限。
- 第二个终端用新私钥登录,验证提权。
- 确认团队和自动任务迁移后再删旧公钥。
丢失后的恢复与回退
优先用 Session Manager、EC2 Instance Connect 或平台救援。都不可用时,可停止实例,把根卷挂到救援实例修复公钥;操作前快照并记录设备,避免误挂载。新入口验证前不关旧会话。失败时恢复公钥备份或旧根卷,绝不开放全网 SSH。
团队访问不要共享一把私钥
共享私钥无法可靠判断是谁登录,也很难在成员离开时只撤销一人。团队环境优先 Session Manager、集中身份或每人独立公钥,并把登录事件送入审计。私钥不要放进聊天、代码仓库、镜像或普通网盘;发现泄露应新增密钥、验证新入口并删除受影响公钥,而不是只改文件名。
安全组只开放真实来源
临时排障也不要把 SSH 长期开放给全网。来源 IP 变化时使用受控 VPN、堡垒或会话管理,避免不断扩大网段。连接问题先按网络、服务、认证三层判断,不能用开放所有端口来证明私钥正确。
轮换完成后检查自动部署、备份拉取和监控脚本是否仍引用旧私钥。把旧公钥删除时间、影响实例和验证人写入记录;只在一台服务器删除会留下其他入口。若使用加密私钥,口令和文件应分开保护,恢复演练要证明授权人员能在需要时取得。

