如何正确配置EC2实例制作EBS备份AMI并解决SSH连接异常问题
解决EC2 AMI实例SSH连接密钥对问题
首先得揪出问题的核心:你提到的~/authorized_keys和/etc/ssh/authorized_keys是目录而非文件——这就是连接失败的关键!SSH服务需要读取密钥文件的内容,而非遍历目录,这两个错误的目录会直接让sshd忽略新密钥对的注入逻辑,只能沿用原实例里的旧密钥。
接下来咱们一步步修复,确保基于新AMI的实例能正常使用所选密钥对:
1. 在原实例(AMI源实例)上清理错误目录并创建正确文件
先登录到你用来制作AMI的原EC2实例,执行以下命令修正目录/文件结构:
# 处理用户主目录下的错误 if [ -d ~/authorized_keys ]; then rm -rf ~/authorized_keys fi # 创建标准的.ssh目录和authorized_keys文件(如果不存在) mkdir -p ~/.ssh touch ~/.ssh/authorized_keys # 设置严格的权限(SSH对权限要求极高,这一步不能省) chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys # 处理/etc/ssh下的错误 sudo if [ -d /etc/ssh/authorized_keys ]; then sudo rm -rf /etc/ssh/authorized_keys fi sudo touch /etc/ssh/authorized_keys sudo chmod 644 /etc/ssh/authorized_keys sudo chown root:root /etc/ssh/authorized_keys
2. 修正sshd_config配置
打开SSH服务配置文件,确保AuthorizedKeysFile的路径正确:
sudo nano /etc/ssh/sshd_config
找到(或修改)这一行,确认路径是.ssh/authorized_keys而非直接的authorized_keys:
AuthorizedKeysFile %h/.ssh/authorized_keys /etc/ssh/authorized_keys
保存退出后,重启SSH服务使配置生效:
sudo systemctl restart sshd
这里的
%h代表用户主目录,对应Ubuntu默认用户ubuntu的/home/ubuntu/.ssh/authorized_keys——这正是EC2启动时注入密钥对的默认路径。
3. 确保EC2密钥注入机制正常
EC2启动新实例时,会通过cloud-init把所选密钥对的公钥写入默认用户的~/.ssh/authorized_keys,要保证这个机制不被破坏:
- 不要随意修改
/etc/cloud/cloud.cfg里的默认配置(除非你之前手动改过) - 确认默认用户主目录权限正确:
/home/ubuntu的权限应为755,所有者是ubuntu:ubuntu
4. 重新制作AMI并验证
完成以上配置后,重新创建新的AMI。用这个AMI启动实例时选择目标密钥对,尝试连接:
ssh -i "your-key-pair.pem" ubuntu@<实例公网IP>
连接成功后,可检查~/.ssh/authorized_keys文件,会看到新密钥对的公钥已被正确注入,原实例的公钥也会保留(如果未手动删除)。
内容的提问来源于stack exchange,提问作者Ryan Cady




