Eu tenho lido muitas perguntas já feitas aqui, no entanto, de alguma forma, nada está funcionando para mim. Eu tenho um script bash onde eu tenho que enviar senha que despejar banco de dados na máquina remota, então é como:
!/bin/sh
/usr/bin/ssh -p 91899 user@remoteHost mysqldump -u db_user -p#8111*@uu( my_database | gzip -c > my_database.sql.gz
Agora a coisa é que essa senha tem todos os tipos de caracteres especiais:
#8111*@uu(
Se eu executar o comando acima diretamente no deve usar a senha entre aspas simples, então funciona: ie.
/usr/bin/ssh -p 91899 user@remoteHost mysqldump -u db_user -p'#8111*@uu(' my_database | gzip -c > my_database.sql.gz
Sem aspas simples, recebo um erro com o '(' no final.
Eu também tentei escapar caracteres na senha como este:
!/bin/sh
/usr/bin/ssh -p 91899 user@remoteHost mysqldump -u db_user -p'\#8111\*\@uu(' my_database | gzip -c > my_database.sql.gz
Em seguida, ele fornece erro de acesso negado.
Eu também tentei usar "fonte" ie. salvando a senha em outro arquivo como:
Arquivo pass.cre
MYPASSWORD='#8111*@uu('
Em seguida, incluindo esse arquivo no script bash:
!/bin/sh
source pass.cre
/usr/bin/ssh -p 91899 user@remoteHost mysqldump -u db_user -p$MYPASSWORD my_database | gzip -c > my_database.sql.gz
Parece estar lendo $ MYPASSWORD do arquivo e, novamente, erro de caractere inválido.
Algum conselho do que estou perdendo?
io#bc@14@9$#jf7AZlk99
Para controle remoto, ou seja, não está funcionando./usr/bin/ssh -p 91899 user@remoteHost "mysqldump -u db_user -p'io#bc@14@9$#jf7AZlk99' my_database | gzip -c > my_database.sql.gz"
Eu tentei escapar como sugerido aqui ie. tendo em mente que ele foi executado duas vezes, mas acho que ao enviar o comando via SSH para o servidor remoto, as coisas parecem pouco mudadas./usr/bin/ssh -p 91899 user@remoteHost "mysqldump -u db_user -p\"'io#bc@14@9$#jf7AZlk99'\" my_database | gzip -c > my_database.sql.gz"
$#
e precisa de aspas simples.O problema é que sua string está sendo interpretada duas vezes, uma vez pelo shell local e novamente pelo shell remoto que
ssh
está sendo executado para você. Então, você precisa citar duas vezes, usando um destes:Editar: se você vai citar duas vezes
""
o comando inteiro, terá problemas com as senhas que contêm$
. Você precisa aspas simples no comando para evitar isso. Mas você ainda precisa citar o-p
valor como ele é interpretado duas vezes. Então você precisa de aspas simples dentro de aspas simples.Isso é feito usando uma citação simples (
\'
) como neste exemplo:lhe dará a corda
I don't like java
. Portanto, seu exemplo de aspas duplas se torna o aspas simples:Você simplesmente não ama?
fonte