必须显式指定authSource参数,因其决定认证数据库,用户若建在test库却默认用admin认证将失败;同时需区分ConnectionFailure(连接失败)与OperationFailure(认证失败),并设置serverSelectionTimeoutMS控制超时。
直接用 pymongo 连接并试登录是最可靠的方式,但必须配合正确的连接参数和错误处理逻辑,否则会漏掉空口令、认证数据库错配、或因超时误判为失败。
mongo 命令行连得上,脚本却报错?MongoDB 的认证机制依赖三个关键参数:用户名、密码、认证数据库(authentication database)。很多脚本只传 username 和 password,却默认用 admin 作为认证库——而实际用户可能建在 test 或其他库中,导致连接被拒绝,报错 not authorized on admin to execute command。
authSource 参数,例如 authSource="admin" 或 authSource="test"
admin、test、local)分别尝试user: "admin", pwd: "")必须显式传空字符串,不能传 None 或省略pymongo.MongoClient 连接时 timeout 和异常类型要分清连接失败不等于认证失败。网络不通、服务未响应、bindIp 配置错误都会导致超时,但这些和弱口令无关。盲目重试或归类为“失败”会掩盖真实风险。
serverSelectionTimeoutMS=3000 控制连接建立超时,避免卡死ConnectionFailure(连不上)、OperationFailure(连上了但认证失败)、ConfigurationError(参数错,如 authSource 不存在)OperationFailure 且消息含 "Authentication failed" 才算一次有效认证尝试失败MongoDB 本身无内置登录失败锁定,但高频并发试探容易被防火墙限速、WAF 拦截,或填满日志导致运维警觉。生产环境扫描必须克制。
ssl=True 除非目标明确开启 TLS,否则会直接失败user in ["admin", "root"] + pwd in ["", "123456", "admin", "password"],别一上来就跑完整字典ping 成功但 db.admin.command("listDatabases") 被拒,说明已通过认证——此时可停手,不必继续试其他密码真正难的不是写脚本,是判断哪些 IP 值得扫、哪些用户该优先试、以及如何从一堆 OperationFailure 里挑出那个真实的空口令——它往往藏在第一个成功建立连接却没报认证错的 case 里,而不是等你把字典跑完。
克里斯托弗·诺兰作品《致命魔术》将重返影院
TP-Link Deco 7 Pro BE10000 Wi-Fi 7 全屋 Mesh 系统 6.4 折优惠现享
《自由足球怀旧服》大乱斗模式开启:强势中场登场:S3赛季任务及奖励重磅更新!
网易冷兵器新作《诡影藏锋》实机首曝:女鬼魅惑,恐怖拉满
炉石传说: Escape from Violet Hold 今日上线——探索游戏背后的人生哲理
亚马逊开启精选 4K 铁盒版促销:《回到未来》《侏罗纪世界》三部曲等作品迎来优惠