Ich habe viele Fragen gelesen, die hier bereits gestellt wurden, aber irgendwie funktioniert nichts für mich. Ich habe ein Bash-Skript, in dem ich ein Passwort senden muss, das die Datenbank auf einem Remotecomputer ausgibt.
!/bin/sh
/usr/bin/ssh -p 91899 user@remoteHost mysqldump -u db_user -p#8111*@uu( my_database | gzip -c > my_database.sql.gz
Nun hat dieses Passwort alle möglichen Sonderzeichen:
#8111*@uu(
Wenn ich den obigen Befehl direkt in soll ausführen und das Passwort in einfachen Anführungszeichen verwenden, funktioniert es: dh.
/usr/bin/ssh -p 91899 user@remoteHost mysqldump -u db_user -p'#8111*@uu(' my_database | gzip -c > my_database.sql.gz
Ohne einfache Anführungszeichen erhalte ich am Ende einen Fehler mit dem '('.
Ich habe auch versucht, Zeichen im Passwort wie folgt zu umgehen:
!/bin/sh
/usr/bin/ssh -p 91899 user@remoteHost mysqldump -u db_user -p'\#8111\*\@uu(' my_database | gzip -c > my_database.sql.gz
Dann wird der Fehler "Zugriff verweigert" angezeigt.
Ich habe auch versucht, "Quelle" zu verwenden, dh. Speichern des Passworts in einer anderen Datei als:
Datei pass.cre
MYPASSWORD='#8111*@uu('
Fügen Sie dann diese Datei in das Bash-Skript ein:
!/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
Es scheint $ MYPASSWORD aus der Datei zu lesen, dann wieder Fehler eines ungültigen Zeichens.
Irgendwelche Ratschläge, was mir fehlt?
io#bc@14@9$#jf7AZlk99
Für Remote funktioniert es nicht, dh./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"
Ich habe versucht zu fliehen, wie hier vorgeschlagen, dh. Denken Sie daran, dass es zweimal ausgeführt wurde, aber ich denke, wenn Sie einen Befehl über SSH an den Remote-Server senden, scheinen sich die Dinge kaum zu ändern./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"
$#
und durchgehend einfache Anführungszeichen benötigen.Das Problem ist, dass Ihre Zeichenfolge zweimal interpretiert wird, einmal von der lokalen Shell und erneut von der Remote-Shell, die
ssh
für Sie ausgeführt wird. Sie müssen also zweimal zitieren und dabei eines der folgenden Elemente verwenden:Bearbeiten: Wenn Sie
""
den gesamten Befehl in doppelte Anführungszeichen setzen, treten Probleme mit den darin enthaltenen Kennwörtern auf$
. Sie müssen den Befehl in einfache Anführungszeichen setzen, um dies zu vermeiden. Sie müssen den-p
Wert jedoch immer noch in einfache Anführungszeichen setzen , da er zweimal interpretiert wird. Sie benötigen also einfache Anführungszeichen in einfachen Anführungszeichen.Verwenden Sie dazu ein einfaches Anführungszeichen (
\'
) wie in diesem Beispiel:wird Ihnen die Zeichenfolge geben
I don't like java
. So wird Ihr Beispiel in doppelten Anführungszeichen zum einfachen Anführungszeichen:Liebst du es nicht einfach?
quelle