Atualmente estou tentando criar um script de shell que executará um mysqldump em um banco de dados MySQL remoto e depois copiará o arquivo de saída de volta para minha máquina local. O problema que estou enfrentando é que não quero codificar a senha no script. Tentei usar 'read' para solicitar a entrada do usuário, mas essa variável não parece estar sendo passada para o comando remoto.
Para referência, meu script é mais ou menos assim:
#!/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}
Se eu executar esse script com
./data_input.sh -t minhatabela
ele solicitará uma senha, mas não verá a variável PASSWORD quando o comando ssh for executado e o mysqldump falhará na autenticação. Qual é a maneira correta de passar a variável de entrada do usuário para o comando ssh?
Você tem um espaço entre
-p
a variável password, mas de acordo com amysqldump
página de manual: