SSH comando de execução remota com caracteres especiais

3

Eu tenho um problema ao executar um comando remoto através do SSH que possui um caractere especial. Estou tentando exportar um banco de dados do MySQL para fins de backup. Este é o comando que tenho no meu script local:

#!/bin/bash
ssh user@host "mysqldump -u dbname -p'p$ssw0rd' --lock-tables=false dbname > ~/sites/mysite/backup/dbname.sql"

Como você pode ver, estou usando os 'caracteres em torno da minha senha. Quando executo este script, recebo o seguinte erro:

mysqldump: Got error: 1045: Access denied for user 'dbname'@'localhost' (using password: YES) when trying to connect

No entanto, quando eu ssh na máquina manualmente e executar o comando, ele executa muito bem. Tenho a impressão de que, ao executar o comando através do ssh, algo é perdido e a senha não aparece.

Como posso executar meu comando com caracteres especiais por meio do ssh?

    
por Luke 04.03.2013 / 03:56

2 respostas

4

Você pode tentar escapar os caracteres especiais no comando que está passando para o ssh. Nesse caso, o seu

p $ ssw0rd

torna-se

p \ $ ssw0rd

Como o shell que você está usando pode interpretar o caractere "\" de maneira diferente, não posso garantir 100% de solução para o seu caso, mas não vai doer tentar.

    
por 04.03.2013 / 04:10
2

Por que você não especifica suas credenciais em um arquivo de opções?

Edite ~/.my.cnf e adicione algo assim:

[mysql]
user = 'dbname'
password = 'p$ssw0rd'

Certifique-se de executar $ chmod 600 ~/.my.cnf para restringir o acesso a esse arquivo.

Então você não precisa especificar aqueles em seu comando SSH. Esta é sem dúvida uma maneira mais segura de fazer qualquer coisa, pois os nomes de usuários / senhas não aparecem em ~/.bash_history ou na lista de processos em execução (que pode ser visualizada por todos os usuários).

    
por 04.03.2013 / 04:03