Domanda Password script di shell con caratteri speciali


Ho creato uno script di shell mysql che funziona molto bene.

Ha solo problemi con le password con caratteri speciali come questo: xgT{uic[Is?uJ+.

Ecco la parte importante della sceneggiatura:

#!/bin/sh
FILE=mysql-$db.$DATE.sql.gz
ssh $SUSER@$SHOST "mysqldump -q -u $MUSER -h $MHOST -p$MPASS $db --no-create-db | gzip -9 > $FILE" 2> $ERROR

L'ho cambiato in:

ssh $SUSER@$SHOST 'mysqldump -q -u $MUSER -h $MHOST -p'\''$MPASS'\'' $db --no-create-db | gzip -9 > $FILE' 2> $ERROR

Come puoi vedere ho già provato le doppie virgolette. Ma ora ho ricevuto l'errore:

bash: $FILE: ambiguous redirect

Ricevo la password e altre informazioni da un file esterno:

DB_HOST=000.000.000.000
DB_DATABASE=dbdame
DB_USER=db user
DB_PASS="xgT{uic[Is?uJ+"

All'interno del mio script prende le informazioni dal file esterno:

Source dbserver.conf
MUSER=$DB_USER
MPASS=$DB_PASS
MHOST=$DB_HOST
DBS=$DB_DATABASE

3
2018-05-02 18:04


origine


Sono stato in grado di farlo eco la tua stringa di caratteri speciali senza problemi. Qual è stato il tuo errore prima di citare la password? - bc2946088
Era: "mysqldump: errore ottenuto: 1045: accesso negato per l'utente '...' @ '...' (utilizzando la password: YES) quando si tenta di connettersi - HHGK
Questo è esattamente l'errore '...' @ '...' o l'hai mascherato? Ovviamente mantieni segreto il tuo nome utente e password, ma ometti alcuni caratteri o l'intera stringa? - bc2946088
L'ho mascherato L'errore originale era con l'utente e l'indirizzo corretti. - HHGK
Potrebbe essere il problema che sto ottenendo la password da un file esterno ?: - HHGK


risposte:


La tua password deve avere i caratteri speciali sfuggiti. Quindi se la tua password originale è xgT{uic[Is?uJ+dovrà diventare xgT\{uic\[Is\?uJ\+ (Una barra prima dei caratteri speciali).

Si potrebbe anche voler guardare qualcosa già scritto per fare questo come AutoMySQLBackup, ma non sono sicuro che tu abbia bisogno di rotazioni di backup giornaliere, settimanali o mensili. Tuttavia si applica la stessa regola, se la password ha caratteri speciali quei caratteri speciali devono essere sfuggiti.

Spero possa aiutare!


1
2018-05-04 17:35





Sì. Ha aiutato a sfuggire a caratteri speciali:

MPASS=$(printf "%q\n" "$DB_PASS")

Ma c'era ancora un problema con mysqldump. Alla fine ho scoperto che mysqldump funzionava solo per me con password con caratteri speciali quando non dicevo a mysqldump l'host (-h hostname). Questo sembra essere un bug. O non è vero?

Purtroppo ho anche siti in cui il server mysql è un altro host. Quindi questa soluzione non è perfetta.


1
2018-05-07 18:34





Dovresti scrivere così:

ssh "$SUSER@$SHOST" "mysqldump -q -u \"$MUSER\" -h \"$MHOST\" -p\"$MPASS\" \"$db\" --no-create-db | gzip -9 > \"$FILE\"" 2> "$ERROR"

Cioè, tutte le variabili usate come argomenti della riga di comando dovrebbero essere protette racchiudendole tra virgolette. Le doppie virgolette attorno alle variabili assicurano che l'espressione sia trattata come un singolo valore, quindi la shell non la dividerà in parole. Notare che " incorporato all'interno "..." bisogno di essere sfuggito, e scritto come \". Una soluzione più semplice consiste nell'usare le virgolette singole invece delle doppie virgolette incorporate, in questo modo:

ssh "$SUSER@$SHOST" "mysqldump -q -u '$MUSER' -h '$MHOST' -p'$MPASS' '$db' --no-create-db | gzip -9 > '$FILE'" 2> "$ERROR"

Infine, mi chiedo se davvero volevi avere 2> "$ERROR" sull'host locale e non sull'host remoto. Ho il sospetto che tu lo volessi davvero sull'host remoto, quindi questo è un altro errore nella linea di comando originale. Se è così, ecco la soluzione:

ssh "$SUSER@$SHOST" "mysqldump -q -u '$MUSER' -h '$MHOST' -p'$MPASS' '$db' --no-create-db | gzip -9 > '$FILE' 2> '$ERROR'"

0
2017-12-18 23:08