Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 为什么在curl中引用密码变量会导致授权失败?(猛击)_Database_Bash_Variables_Curl_Authorization - Fatal编程技术网

Database 为什么在curl中引用密码变量会导致授权失败?(猛击)

Database 为什么在curl中引用密码变量会导致授权失败?(猛击),database,bash,variables,curl,authorization,Database,Bash,Variables,Curl,Authorization,我对bash和curl有一个非常具体的问题 我们所做的是: 从jenkins读取密码并将其粘贴到配置文件(我无权访问该密码) 从bash中的配置文件中读取参数(主机、用户、密码等),并将其存储在变量中 将带有curl的内容发布到数据库,并将结果存储在变量中 最近,我们在部署脚本中添加了shellcheck,因此需要将变量放在引号中 这是我们要发送的请求(shellcheck已批准): 这是我们得到的错误信息: {“错误”:“授权失败”} 当我解压缩密码变量(“${dbUser}”:${dbP

我对bash和curl有一个非常具体的问题

我们所做的是:

  • 从jenkins读取密码并将其粘贴到配置文件(我无权访问该密码)
  • 从bash中的配置文件中读取参数(主机、用户、密码等),并将其存储在变量中
  • 将带有curl的内容发布到数据库,并将结果存储在变量中
最近,我们在部署脚本中添加了shellcheck,因此需要将变量放在引号中

这是我们要发送的请求(shellcheck已批准):

这是我们得到的错误信息:

{“错误”:“授权失败”}

当我解压缩密码变量(“${dbUser}”:${dbPwd})时,它确实起作用。但是拼写检查抱怨说,我需要把所有变量都用引号引起来。它也可以在另一台密码不同的机器上工作(我也没有访问权限)

同样,当我使用
--用户用户名:密码时。所以问题似乎出在密码上

使用google并用不同的特殊字符测试程序(没有curl)也无法解决这个问题

有人经历过这样的事情吗

编辑1: 这是jenkins部署文件的摘录

stage('config files') {
        withCredentials([string(credentialsId: "${env_params.db_password}", variable: 'db_pw')]) {
            sshagent(credentials: ["${env_params.user}"]) {
                sh "echo \"dbPwd=${db_pw}\" >>  environment_variables/config.properties"
这就是shell脚本存储密码的方式

dbPwd=$(grep ^"$dbPwd" <PATH>/config.properties | cut -d "=" -f2)
dbPwd=$(grep^“$dbPwd”/config.properties | cut-d”=“-f2)

您可以在另一个文件中设置密码,并将文件内容用作密码变量。

谢谢您的支持。 密码存储中似乎有尾随空格。 我用sed删除了它们,现在它可以工作了

dbPwd=$(grep ^"$dbPwd" <PATH>/config.properties | cut -d "=" -f2 | sed -e 's/[[:space:]]*$//')
dbPwd=$(grep^“$dbPwd”/config.properties | cut-d”=“-f2 | sed-e's/[:space:][]*$/”)

我首先将
echo-n“${dbUser}”:${dpPwd}
替换为
printf'%s'$dbUser:$dbPwd'
。另外,您首先是如何设置
dbPwd
的?不带引号的参数扩展会进行分词和路径名生成;您设置
dpPwd
的过程可能是以预期(因此现在需要)执行分词和路径名扩展的方式进行的。也可能是密码变量以某种方式被乱码,分词“纠正”——比如可能在值中有尾随空格。如果不访问密码,将很难进行故障排除。您是否可以设置一个您确实拥有密码的测试帐户,并查看其行为?最有可能的是,密码后面有空格(空格、新行、\r、…)。使用“-x”运行脚本以了解更多信息。此外,考虑从CONFIG文件中共享读取密码的代码也可以是密码/用户中的引导空格,或者口令本身包含多个连续的空白。
dbPwd=$(grep ^"$dbPwd" <PATH>/config.properties | cut -d "=" -f2 | sed -e 's/[[:space:]]*$//')