使用自定义PEM私钥连接服务器时需输入未知服务器密码的问题
解决SSH密钥连接却要求服务器密码的问题
看起来你遇到的核心问题是SSH没有正确使用你提供的PEM私钥进行认证,反而 fallback 到了密码登录。咱们一步步来排查解决:
1. 连接时明确指定你的私钥文件
很多时候SSH会默认去~/.ssh目录找id_rsa、id_ecdsa这类默认命名的密钥,不会自动识别当前目录的private.pem。所以你需要手动指定密钥文件路径:
ssh -i /绝对路径/到你的/private.pem 你的用户名@服务器IP或域名
如果你的私钥设置了passphrase,这时候应该会提示你输入这个passphrase,而不是服务器的密码。
2. 验证私钥与服务器公钥的匹配性
确保本地私钥对应的公钥,已经正确添加到服务器的~/.ssh/authorized_keys文件中:
- 先在本地生成私钥对应的公钥字符串:
ssh-keygen -y -f /绝对路径/到你的/private.pem
- 把输出的公钥字符串,和服务器上
~/.ssh/authorized_keys里的条目对比,确保完全一致(没有多余空格、换行或者拼写错误)。
3. 检查本地和服务器的权限设置
权限不对是SSH密钥认证失败的常见原因:
- 本地私钥
private.pem必须设置为600权限(只有你自己能读写):
chmod 600 /绝对路径/到你的/private.pem
- 服务器端的
~/.ssh目录权限要设为700,authorized_keys文件权限设为600:
# 在服务器上执行 chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys
4. 检查服务器的SSH配置(需能登录服务器)
如果上面的步骤都没问题,可能是服务器的SSH服务禁用了公钥认证:
- 登录服务器后,打开
/etc/ssh/sshd_config文件,确保以下配置项正确:
PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2
- 修改后重启SSH服务(不同系统命令略有不同):
# Ubuntu/Debian sudo service ssh restart # CentOS/RHEL sudo systemctl restart sshd
5. 用verbose模式排查细节
如果还是不行,用-v参数开启调试模式,看具体哪里出错:
ssh -v -i /绝对路径/到你的/private.pem 你的用户名@服务器IP或域名
看输出里的debug信息,比如有没有出现Offering public key:(说明SSH尝试用你的私钥),如果后面跟着Server refused our key,那就是密钥不匹配或者服务器配置拒绝了;如果根本没加载你的私钥,那就是路径指定错了。
内容的提问来源于stack exchange,提问作者user1971988
相关产品推荐
相关产品推荐

