从Shell脚本查询MongoDB Atlas遇认证失败,求解决方法
问题诊断与解决
你的认证失败问题核心是连接字符串里的凭证被额外包裹了单引号,导致mongosh解析到的用户名/密码包含多余的单引号字符,进而认证失败。
错误原因
你当前的命令中,将${dev_creds}用单引号包裹在了连接字符串里:
collection_list=`mongosh --quiet "mongodb+srv://'${dev_creds}'@sandbox.vk4dz.mongodb.net/" --apiVersion 1 --eval "db.getCollectionNames()"`
假设dev_creds的值是username:password,实际传递给mongosh的连接字符串会变成:mongodb+srv://'username:password'@sandbox.vk4dz.mongodb.net/
mongosh会把'username当作用户名,password'当作密码,这显然和你的真实凭证不符,导致认证失败。
修复方案
直接去掉连接字符串中包裹${dev_creds}的单引号即可:
collection_list=$(mongosh --quiet "mongodb+srv://${dev_creds}@sandbox.vk4dz.mongodb.net/" --apiVersion 1 --eval "db.getCollectionNames()")
另外建议用$(command)替代反引号`command`,这是更现代、可读性更好的命令替换写法,且避免了嵌套时的转义问题。
额外验证建议
- 可以先在终端单独执行简化版命令测试:
mongosh "mongodb+srv://${dev_creds}@sandbox.vk4dz.mongodb.net/" --apiVersion 1 --eval "db.getCollectionNames()"
确认能正常返回结果后再整合到脚本中。
- 确保
dev_creds变量没有包含特殊字符(比如@、:、/等),如果有需要提前用URL编码处理,比如用urlencode工具对用户名和密码分别编码后再拼接成user:password格式。
内容的提问来源于stack exchange,提问作者user27918438
相关产品推荐
相关产品推荐

