我目前正在尝试创建一个 shell 脚本,它将在远程 mysql 数据库上执行 mysqldump,然后将输出文件复制回我的本地计算机。我遇到的问题是我不想将密码硬编码到脚本中。我尝试使用“read”提示用户输入,但该变量似乎没有传递给远程命令。
作为参考,我的脚本看起来像这样:
#!/bin/bash
PASSWORD=""
TABLE=""
while getopts t: flag
do
case "${flag}" in
t) TABLE=${OPTARG};;
*) echo 'invalid argument.'
esac
done
read -sp "input the mysql password:" PASSWORD
#this is just to verify what the local and remote command is seeing
echo "$TABLE, $PASSWORD"
ssh myserver -p 9999 "echo $TABLE, $PASSWORD"
#this is the ssh command
ssh myserver -p 9999 "mysqldump --xml -h somesql.us-east-1.rds.amazonaws.com -u admin -p ${PASSWORD} mydb ${TABLE} > ${TABLE}.xml"
scp -p 9999 myserver:/${TABLE}.xml ${TABLE.xml}
如果我运行该脚本
./data_input.sh -t mytable
它会提示输入密码,但在 ssh 命令运行时看不到 PASSWORD 变量,并且 mysqldump 将无法进行身份验证。将用户输入变量传递给 ssh 命令的正确方法是什么?