将用户输入传递给 ssh 命令

将用户输入传递给 ssh 命令

我目前正在尝试创建一个 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}

如果我使用以下命令运行该脚本

./数据输入.sh -t mytable

它会提示输入密码,但在 ssh 命令运行时看不到 PASSWORD 变量,mysqldump 将无法进行身份验证。将用户输入变量传递给 ssh 命令的正确方法是什么?

答案1

和密码变量之间有一个空格-p,但根据mysqldump手册页:

如果给定,--password= 或 -p 与其后的密码之间不能有空格。

相关内容