Czytałem już wiele pytań tutaj zadanych, jednak jakoś nic mi nie działa. Mam skrypt bash, w którym muszę wysłać hasło, które zrzuca bazę danych na zdalnym komputerze, więc wygląda to tak:
!/bin/sh
/usr/bin/ssh -p 91899 user@remoteHost mysqldump -u db_user -p#8111*@uu( my_database | gzip -c > my_database.sql.gz
Chodzi o to, że to hasło ma wiele znaków specjalnych:
#8111*@uu(
Jeśli uruchomię powyższą komendę bezpośrednio w powinienem użyć hasła w pojedynczych cudzysłowach, to zadziała: tj.
/usr/bin/ssh -p 91899 user@remoteHost mysqldump -u db_user -p'#8111*@uu(' my_database | gzip -c > my_database.sql.gz
Bez pojedynczych cytatów pojawia się błąd oznaczający „(” na końcu.
Próbowałem także uciec od znaków w haśle:
!/bin/sh
/usr/bin/ssh -p 91899 user@remoteHost mysqldump -u db_user -p'\#8111\*\@uu(' my_database | gzip -c > my_database.sql.gz
Następnie daje błąd odmowy dostępu.
Próbowałem także użyć „źródła”, tj. zapisywanie hasła w innym pliku jako:
Plik pass.cre
MYPASSWORD='#8111*@uu('
Następnie dołączając ten plik do skryptu 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
Wygląda na to, że odczytuje $ MYPASSWORD z pliku, a następnie błąd nieprawidłowego znaku.
Jakaś rada, której mi brakuje?
io#bc@14@9$#jf7AZlk99
W przypadku zdalnego nie działa, tzn./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"
Próbowałem uciec, jak tu sugerowano, tj. pamiętając, że został on wykonany dwukrotnie, ale myślę, że wysyłając polecenie za pośrednictwem SSH do zdalnego serwera, wydaje się, że niewiele się zmieniło./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"
$#
i potrzebujesz pojedynczych cudzysłowów przez cały czas.Problem polega na tym, że Twój ciąg znaków jest interpretowany dwukrotnie, raz przez lokalną powłokę i ponownie przez
ssh
uruchomioną dla ciebie zdalną powłokę . Musisz więc zacytować dwa razy, używając jednego z tych:Edycja: Jeśli zamierzasz zacytować
""
całe polecenie, będziesz mieć problemy z zawartością haseł$
. Aby tego uniknąć, musisz zacytować polecenie pojedynczo. Ale nadal musisz podać pojedynczy cudzysłów,-p
ponieważ jest on interpretowany dwukrotnie. Potrzebujesz więc pojedynczych cudzysłowów w pojedynczych cudzysłowach.Odbywa się to za pomocą pojedynczego cudzysłowu (
\'
), jak w tym przykładzie:da ci sznurek
I don't like java
. Tak więc podwójnie cytowany przykład staje się pojedynczym:Nie lubisz tego?
źródło