Я читал много вопросов, которые уже задают здесь, однако, так или иначе ничто не работает на меня. У меня есть сценарий удара, куда я должен отправить пароль, которые выводят базу данных по удаленной машине, таким образом, как:
!/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 из файла с другой стороны ошибка недопустимого символа.
Совет, что я пропускаю?
Используйте двойные кавычки дважды, оставленный, и не вышел: -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.
Проблема состоит в том, что Ваша строка интерпретируется дважды, однажды локальной оболочкой, и снова удаленной оболочкой, которая 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'
Вы не просто любите его?