Mac SSH连接CentOS 6 EC2实例公钥认证失败问题排查
问题根因
- 初始使用的ed25519密钥完全不被服务端支持:服务端运行的是CentOS 6自带的OpenSSH 5.3,ed25519算法是OpenSSH 6.5版本才新增支持的,服务端根本无法识别该类型公钥,直接拒绝认证。
- 后续更换RSA密钥仍连接失败,是客户端与服务端的默认算法策略不兼容导致:本地使用的OpenSSH 8.1版本默认禁用了基于SHA1哈希的
ssh-rsa签名算法(存在碰撞安全风险),但OpenSSH 5.3版本不支持更新的rsa-sha2-256/rsa-sha2-512签名算法,仅支持ssh-rsa,因此即使本地使用RSA密钥,客户端默认不会发送服务端能识别的认证签名,最终返回公钥认证拒绝。 - 新启动EC2实例同样报错,是因为自定义AMI继承了原实例的CentOS 6 + OpenSSH 5.3环境,问题完全一致,和IP白名单、私钥本地权限无关。
解决方案
- 修改本地
~/.ssh/config配置,针对这两个老版本主机单独添加兼容配置,不要做全局修改避免影响其他服务器连接安全性,配置参考如下:
Host never_dev HostName neverstaydev.com User neverst IdentityFile ~/.ssh/你生成的RSA私钥本地路径 # 兼容OpenSSH 5.3的算法配置 HostkeyAlgorithms +ssh-rsa PubkeyAcceptedKeyTypes +ssh-rsa KexAlgorithms +diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1 Host beta HostName 12.18.125.53 User neverst IdentityFile ~/.ssh/你生成的RSA私钥本地路径 # 兼容OpenSSH 5.3的算法配置 HostkeyAlgorithms +ssh-rsa PubkeyAcceptedKeyTypes +ssh-rsa KexAlgorithms +diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1
注意:OpenSSH 8.1版本中配置公钥允许算法的参数名为
PubkeyAcceptedKeyTypes,8.5之后版本才改名为PubkeyAcceptedAlgorithms,不要写错参数名否则配置不生效。
联系运维核对服务端公钥配置:
- 确认
~neverst/.ssh/authorized_keys文件中存储的是新生成的RSA公钥(公钥行开头为ssh-rsa,不是之前的ssh-ed25519),公钥内容完整无换行、缺字。 - 确认
.ssh目录权限为700,authorized_keys文件权限为600,两个对象的属主均为neverst用户,避免共享账号场景下运维用root上传公钥导致权限异常、服务端无法读取公钥。
- 确认
配置完成后直接执行连接命令即可,无需调整私钥本地权限,之前设置的0400、0600权限均符合SSH安全要求。如果仍连接失败,执行
ssh -vv never_dev开启详细调试日志,查看日志中是否出现RSA密钥的Offer记录、服务端是否返回密钥拒绝提示,针对性排查公钥匹配问题。
内容的提问来源于stack exchange,提问作者charlottesville
相关产品推荐
相关产品推荐

