Сценарий Bash и выходящий из специальных символов в пароле

Я читал много вопросов, которые уже задают здесь, однако, так или иначе ничто не работает на меня. У меня есть сценарий удара, куда я должен отправить пароль, которые выводят базу данных по удаленной машине, таким образом, как:

!/bin/sh
/usr/bin/ssh -p 91899 user@remoteHost mysqldump -u db_user -p#8111*@uu( my_database |  gzip -c >  my_database.sql.gz

Теперь вещь состоит в том, что этот пароль имеет все виды специального символа: #8111*@uu(

Если я буду работать выше команды непосредственно в, то буду с помощью пароля в одинарных кавычках затем, это работает: т.е.

/usr/bin/ssh -p 91899 user@remoteHost mysqldump -u db_user -p'#8111*@uu(' my_database |  gzip -c >  my_database.sql.gz

Без одинарных кавычек я получаю ошибку с для' (' в конце.

Я также попробовал к символам ESC в пароле как это:

!/bin/sh
/usr/bin/ssh -p 91899 user@remoteHost mysqldump -u db_user -p'\#8111\*\@uu(' my_database |  gzip -c >  my_database.sql.gz

Затем это дает ошибку доступа запрещен.

Я также пытался использовать "источник" т.е. пароль сохранения в другом файле как:

Файл pass.cre

MYPASSWORD='#8111*@uu('

Затем включая тот файл в сценарии удара:

!/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

Это, кажется, читает $MYPASSWORD из файла с другой стороны ошибка недопустимого символа.

Совет, что я пропускаю?

9
задан 2 August 2015 в 02:02

2 ответа

Используйте двойные кавычки дважды, оставленный, и не вышел: -p"\"$MYPASSWORD\""

#!/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'

Или другая версия

/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"
<час>

Примеры

% source pass.cre
% ssh user@host mysqldump -u root -p$MYPASSWORD    
user@host's password: 
zsh:1: bad pattern: -p#8111*@uu(

% source pass.cre
% ssh user@host mysqldump -u root -p"$MYPASSWORD"   
user@host's password: 
zsh:1: bad pattern: -p#8111*@uu(

% source pass.cre
% ssh user@host mysqldump -u root -p"\"$MYPASSWORD\""
user@host's password: 
Warning: Using a password on the command line interface can be insecure.
7
ответ дан 23 November 2019 в 05:04

Проблема состоит в том, что Ваша строка интерпретируется дважды, однажды локальной оболочкой, и снова удаленной оболочкой, которая ssh работает за Вами. Таким образом, необходимо заключить в кавычки дважды, с помощью любого из них:

-p\''#8111*@uu('\'
-p"'#8111*@uu('"

Редактирование: , Если Вы идете в двойную кавычку "" вся команда, у Вас будут проблемы с паролями, содержащими $. Вам нужна к одинарной кавычке команда для предотвращения этого. Но Вам все еще нужно к одинарной кавычке эти -p значение, поскольку это интерпретируется дважды. Таким образом, Вам нужны одинарные кавычки в одинарных кавычках.

Это сделано использованием единственная заключенная в кавычки кавычка (\') как в этом примере:

'I don'\''t like java'

даст Вам строку I don't like java. Таким образом, Ваш дважды заключенный в кавычки пример становится единственно заключенным в кавычки:

/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'

Вы не просто любите его?

2
ответ дан 23 November 2019 в 05:04

Другие вопросы по тегам:

Похожие вопросы: