AWS EC2实例无.pem文件SSH登录失败问题求助
问题原因及解决办法
以下是导致你遇到这个问题的常见原因及对应解决方法:
1. SSH 默认未加载你的自定义私钥
SSH 在不通过 -i 指定私钥时,只会自动查找默认路径下的标准命名私钥,比如:
~/.ssh/id_rsa~/.ssh/id_ecdsa~/.ssh/id_ed25519
如果你的私钥是自定义名称(比如mypemfile.pem)或者放在非默认目录,SSH 找不到对应私钥,就会触发Permission denied (publickey)错误。而通过-i参数明确指定私钥路径后,SSH就能正确加载密钥完成认证。
解决办法:
- 将私钥复制到默认路径并重命名为标准名称:
cp /path/to/mypemfile.pem ~/.ssh/id_rsa - 或者通过
ssh-agent添加私钥,让SSH自动识别:
(需要永久生效的话,可把这条命令加到你的shell配置文件,比如ssh-add /path/to/mypemfile.pem~/.bashrc或~/.zshrc)
2. 使用sudo执行SSH导致用户上下文切换
你执行的是sudo ssh ubuntu@publicIPAddress,这会切换到root用户的上下文发起SSH连接。root用户的SSH密钥目录是/root/.ssh/,而非你普通用户的~/.ssh/。如果/root/.ssh/下没有对应的私钥,SSH就无法完成认证;但通过-i指定私钥路径时,SSH会直接读取你指定的文件,不受当前用户上下文的.ssh目录限制,所以能成功登录。
解决办法:
- 不要用
sudo执行SSH命令,直接用普通用户身份运行:ssh ubuntu@publicIPAddress - 若确实需要用root用户发起连接,把私钥复制到
/root/.ssh/目录并设置正确权限:sudo cp /path/to/mypemfile.pem /root/.ssh/id_rsa sudo chmod 600 /root/.ssh/id_rsa
3. 本地私钥权限不符合SSH安全要求
SSH对私钥权限有严格限制,若私钥的权限过松(比如组或其他用户有读取权限),会被SSH拒绝使用。
解决办法:
设置私钥权限为仅所有者可读:
chmod 600 /path/to/mypemfile.pem
4. EC2实例上的.ssh目录或authorized_keys权限错误
即使你确认authorized_keys内容正确,若目录或文件权限不符合要求,SSH服务也会拒绝认证。
解决办法:
登录EC2实例后,执行以下命令修复权限:
sudo chown -R ubuntu:ubuntu /home/ubuntu/.ssh sudo chmod 700 /home/ubuntu/.ssh sudo chmod 600 /home/ubuntu/.ssh/authorized_keys
内容的提问来源于stack exchange,提问作者Zain Khan
相关产品推荐
相关产品推荐

