使用shell中的变量将密码传递给mysql_config_editor

Sau*_*ava 5 mysql linux variables bash shell

我将密码存储在变量$ db_pwd中,我想将它传递给shell脚本中的mysql_config_editor.我不能使用配置文件或db_pwd环境变量.

我这样做

mysql_config_editor set --login-path=local --host=localhost --user=username --password
Run Code Online (Sandbox Code Playgroud)

(/sf/answers/1459783391/).

它的作用是要求输入密码"输入密码",但我希望使用变量提供密码.

我试过这个:

mysql_config_editor set --login-path=local --host=localhost --user=username --password $db_pwd
Run Code Online (Sandbox Code Playgroud)

mysql_config_editor set --login-path=local --host=localhost --user=username --password | echo $db_pwd
Run Code Online (Sandbox Code Playgroud)

echo "$db_pwd" | mysql_config_editor set --login-path=local --host=localhost --user=username --password
Run Code Online (Sandbox Code Playgroud)

  • expect.但是,如果出现"此路径已存在,重写(y/n)"等警告,则会导致错误.
  • 选项文件,但即使我使用它作为第一个参数,它们仍然给我变量未找到错误.选项文件是否与mysql配置编辑器兼容?

有什么办法吗?或者我应该恢复使用mysql而不是mysql_config_editor?

小智 5

当没有 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}
"
Run Code Online (Sandbox Code Playgroud)

测试一下:

./mysql_config.sh login 10.1.2.3 myuser mypass < /dev/null
Run Code Online (Sandbox Code Playgroud)


Sir*_*hos 4

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

话虽如此,您仍然可以尝试将密码提供给mysql_config_editor

echo "$db_pwd" | mysql_config_editor set --login-path=local --host=localhost --user=username --password
Run Code Online (Sandbox Code Playgroud)

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

正如您链接到的答案所述,您可以mysql直接使用来提供密码。使用mysql_config_editor意味着以.mylogin.cnf加密形式存储密码(即,您从终端提供一次密码,然后将其加密并保存在配置文件中,mysql 可以从那里使用它)。

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

更新:通过使用以下实用程序,您可能会误mysql_config_editor认为它正在从交互式终端读取:unbuffer

echo "$db_pwd" | unbuffer -p mysql_config_editor set --login-path=local --host=localhost --user=username --password
Run Code Online (Sandbox Code Playgroud)