当前位置: 首页 > 知识库问答 >
问题:

使用shell中的变量将密码传递给mysql_config_编辑器

宰父嘉胜
2023-03-14

我的密码存储在一个变量$db_pwd中,我想用一个shell脚本将其传递给mysql_config_编辑器。我不能使用配置文件或db_pwd环境变量。

我正在这么做

mysql_config_editor set --login-path=local --host=localhost --user=username --password

(https://stackoverflow.com/a/20854048/6487831)。

它所做的是要求密码“输入密码”,但我希望使用变量提供密码。

我试过这个:

mysql_config_editor set --login-path=local --host=localhost --user=username --password $db_pwd

mysql_config_editor set --login-path=local --host=localhost --user=username --password | echo $db_pwd

echo "$db_pwd" | mysql_config_editor set --login-path=local --host=localhost --user=username --password

  • expect。但如果出现“此路径已存在,请重写(y/n)”之类的警告,则会导致错误。

有办法吗?或者我应该恢复使用mysql而不是mysql\u config\u编辑器吗?

共有3个答案

伊光赫
2023-03-14

也遇到了这个问题。我的解决方案是运行一次命令,并在提示时提供密码

mysql_config_editor set --login-path=local --host=localhost --user=username --password

这将生成文件。mylogin.cnf在用户主目录中。只需使用--login-path选项将此文件(可以从bash脚本中完成)复制给您要授予访问权限的用户即可。

据我所知。mylogin.cnf只是存储特定--login-path的用户名和密码的一种模糊方式

顾文昌
2023-03-14

--password参数旨在明确避免在命令行上传递密码,因为这被认为是不安全的。

也就是说,您可以尝试将密码提供给mysql_config_editor

echo "$db_pwd" | mysql_config_editor set --login-path=local --host=localhost --user=username --password

(如果mysql_config_editor坚持从当前终端而不是标准中获取输入,这可能不起作用;如果是这样,您就无法从变量中提供密码)。

作为链接到states的答案,您可以直接使用mysql提供密码。使用mysql\u config\u editor是为了在中存储密码。迈洛金。cnf以加密的形式(即,您从终端提供一次密码,然后将其加密并保存在配置文件中,mysql可以从那里使用它)。

参考:https://dev.mysql.com/doc/refman/5.7/en/mysql-config-editor.html

更新:您可以使用unBuffer实用程序诱使mysql_config_editor认为它正在从交互式终端读取:

echo "$db_pwd" | unbuffer -p mysql_config_editor set --login-path=local --host=localhost --user=username --password
范振海
2023-03-14

我发现在没有TTY的情况下,另一个建议的答案不起作用。所以我使用了这个bash脚本,它在Terraform/ssh等没有终端的地方工作:

#!/bin/bash

if [ $# -ne 4 ]; then
  echo "Incorrect number of input arguments: $0 $*"
  echo "Usage: $0 <login> <host> <username> <password>"
  echo "Example: $0 test 10.1.2.3 myuser mypassword"
  exit 1
fi

login=$1
host=$2
user=$3
pass=$4

unbuffer expect -c "
spawn mysql_config_editor set --login-path=$login --host=$host --user=$user --password
expect -nocase \"Enter password:\" {send \"$pass\r\"; interact}
"

测试它:

./mysql_config.sh login 10.1.2.3 myuser mypass < /dev/null
 类似资料:
  • 问题内容: 我刚开始学习groovy,我想将svnSourcePath和svnDestPath传递给svn copy命令中的shell脚本。但是网址未呈现。 输出量 问题答案: 在变量周围添加了单引号和加operator(’+ variable +’)。现在正在工作

  • 问题内容: 我从Jenkins触发了一个shell脚本,该脚本获取日期并将其导出为环境(Linux)变量$ DATE。我需要在同一詹金斯工作中使用此$ DATE。我做了工作作为参数构建。创建一个字符串参数作为DATE值,如DATE = $ DATE。但这是行不通的。 请建议! 问题答案: 您提到要在外壳程序脚本中导出环境变量,该脚本可能是通过“执行外壳程序”步骤启动的。 问题是,一旦完成外壳程序步

  • 问题内容: 我对此完全迷失了;我正在使用NodeJS来获取JSON,我需要将变量传递给我的页面并让JavaScript使用数据。 那就是我的Express代码(出于测试目的非常简单);现在使用EJS,我想收集这些我知道要呈现在页面上的数据, 但是我需要能够在JavaScript中收集这些数据(如果可能在.js文件中),但现在只是在我尝试过的“警告”框中显示变量 在翡翠中就像或。我可以在EJS中做类

  • 问题内容: 我有类似下面的代码: 但是,该变量未在ActionListener类的范围内定义。如何传递变量? 问题答案: 除了Hovercraft的答案外,您还应注意,您不会被迫对侦听器使用匿名类。气垫船的答案代码类似于以下代码:

  • 问题内容: 我有Google地图提供的JavaScript值,需要将其保存在MySQL数据库中。 其实我有变量 我需要将该变量传递给PHP变量lugar 问题答案: 如果要在页面转换时进行操作,则可以通过表单或在URL中传递它,然后仅使用或接收变量。 如果您需要无缝完成它,那么您可能需要考虑使用AJAX。

  • 问题内容: 目前,我正在使用Ajax来开发现有脚本,这是我以前从未使用过的东西。我在javascript文件中设置了一个变量,该变量从页面上的输入字段获取其值。我只需要使用Ajax将其发布到我的PHP页面,不知道从哪里开始, 我不确定您需要查看什么代码,但是我的javascript / AJAX代码是,我需要传递的变量是’var credoff’ 一定要采用这种格式吗? 问题答案: