mongodump密码含单双引号触发EOF语法错误的修复方案咨询
含特殊字符的MongoDB密码执行mongodump报错修复方案
报错根因
返回的
/bin/sh: 1: Syntax error: EOF in backquote substitution错误由Shell字符串解析规则冲突导致:
- 单引号包裹的字符串无法直接嵌入单引号,原命令中的
-p='f'%Z(Ov"{Z(i'写法会被Shell截断,导致密码中的反引号没有被正确包裹,触发Shell的命令替换逻辑,缺少闭合标记就会抛出EOF错误- 本次使用的密码同时包含单引号、双引号、反引号三类Shell特殊保留字符,普通单/双引号包裹都会触发解析异常
修复方案
方案1:使用Shell ANSI-C引号语法(最快解决)
利用Shell支持的$'...'ANSI-C字符串语法包裹密码,仅需转义密码内的单引号为\'即可,无需处理其他特殊字符,修改后命令如下:
sudo docker exec -t container_name mongodump --db db_name --authenticationDatabase admin -u=username -p=$'f\'%`Z(Ov"{Z(i' -o=/data/db/backup/mongodump_sample --gzip
方案2:环境变量传递密码(更高安全性)
通过环境变量传递密码,既可以规避转义冲突,还能避免密码明文出现在进程列表中,操作如下:
# 定义密码变量,单引号内的单引号用'\''格式转义 MONGO_PASS='f'\''%`Z(Ov"{Z(i' # 传入环境变量到容器并执行命令 sudo docker exec -t -e MONGO_PASS="$MONGO_PASS" container_name mongodump --db db_name --authenticationDatabase admin -u=username -p="$MONGO_PASS" -o=/data/db/backup/mongodump_sample --gzip
方案3:配置文件传递认证信息(最稳妥无转义)
将认证信息写入MongoDB配置文件,执行命令时指定配置文件,完全不需要处理特殊字符转义:
- 在docker容器内创建配置文件
/tmp/mongo-auth.conf,内容如下:
username: "username" password: "f'%`Z(Ov\"{Z(i" authenticationDatabase: "admin"
- 执行mongodump命令指定配置文件:
sudo docker exec -t container_name mongodump --config /tmp/mongo-auth.conf --db db_name -o=/data/db/backup/mongodump_sample --gzip
内容的提问来源于stack exchange,提问作者Neo
相关产品推荐
相关产品推荐

