AWS EC2部署NodeJS+MongoDB后Robo 3T连接认证失败报错-18(#35)
解决Robo 3T连接AWS EC2上MongoDB的认证错误问题
你在AWS EC2上部署了NodeJS+MongoDB服务,安卓端能正常实现数据存储与读取,但用Robo 3T连接时碰到了这个报错:Resource temporarily unavailable. Authentication by key (path of the .pem key) failed (Error -18). (Error #35),我帮你梳理几个最可能的排查方向,一步步解决:
1. 先搞定SSH密钥的基础问题
这是最容易踩坑的核心点:
- 严格设置密钥权限:Linux系统对SSH密钥的权限要求极高,直接在本地终端执行
chmod 400 /path/to/your-key.pem,把密钥文件改成仅所有者可读的权限——如果权限太宽松(比如777),SSH会直接拒绝使用该密钥。 - 检查密钥完整性:打开你的
.pem文件,确认末尾有完整的-----END RSA PRIVATE KEY-----标记,要是复制或传输过程中丢失了部分内容,必然会导致认证失败。
2. 核对EC2安全组规则
别让安全组拦住了你的连接:
- 确保安全组里有允许**你的本地公网IP访问SSH端口(默认22)**的规则,如果你的IP是动态的,可临时改成允许
0.0.0.0/0(仅测试用,不要长期开启),或者更新成当前的公网IP。 - 如果你用SSH隧道方式连接MongoDB,安全组只需要开放SSH端口即可;要是直接连接MongoDB的27017端口,还要额外添加一条允许本地IP访问27017的规则(更推荐用SSH隧道,安全性更高)。
3. 检查Robo 3T的连接配置细节
很多时候是配置填错导致的:
- 在Robo 3T的SSH选项卡里,用户名别填混:不同EC2镜像的默认用户名不一样——Amazon Linux是
ec2-user,Ubuntu是ubuntu,CentOS是centos,填错会直接触发认证失败。 - 确认SSH主机填的是EC2的公网IP/弹性IP,别填成内网IP了,内网IP仅能在VPC内部访问。
- 先尝试用本地终端SSH连接EC2:
ssh -i /path/to/your-key.pem username@ec2-public-ip,如果终端都连不上,那先解决SSH层面的问题,再调试Robo 3T。
4. 核对MongoDB的认证与绑定配置
虽然安卓端能正常读写,但Robo 3T的认证逻辑可能存在差异:
- 如果MongoDB开启了认证,在Robo 3T的「Authentication」选项卡,要填对数据库用户名、密码,还要选对对应的认证数据库(默认是
admin)。 - 查看
mongod.conf里的bindIp配置:如果设为127.0.0.1,那只能通过SSH隧道访问;要直接连接的话改成0.0.0.0,但记得配合安全组限制IP,不要暴露给全网。
5. 临时测试:关闭实例内部防火墙
有时候EC2内部的防火墙会干扰连接:
- 对于Amazon Linux/CentOS:执行
sudo systemctl stop firewalld临时关闭firewalld - 对于Ubuntu:执行
sudo ufw disable临时关闭ufw
如果关闭后能成功连接,再重新配置防火墙规则允许SSH和MongoDB端口,不要长期保持无防火墙的状态。
内容的提问来源于stack exchange,提问作者Jin Wook Paeng Gilbert
相关产品推荐
相关产品推荐

