Import base SQL via ssh et mot de passe caractères spéciaux

Fred -  
mamiemando Messages postés 33766 Date d'inscription   Statut Modérateur Dernière intervention   -

Bonjour,

J'ai un mot de passe mysql avec des caractères spéciaux : ( ) $ et ?

Je lance un import de base de données par la commande suivante :

gunzip < /home/nexcloud.sql.gz | mysql -u root -p nextcloud

Tout fonctionne bien !

Je lance la même commande via ssh et là cela plante, en raison des caractères spéciaux du mot de passe. 

ssh ***@*** "gunzip < /home/nexcloud.sql.gz | mysql -u root -p nextcloud"

Une idée pour solutionner ce souci ? Je suis dessus depuis des heures sans succès...

Merci

Fred


Windows / Firefox 111.0

A voir également:

3 réponses

dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 636
 

hello

essayer

ssh ***@*** 'gunzip < /home/nexcloud.sql.gz | mysql -u root -p nextcloud'
0
mamiemando Messages postés 33766 Date d'inscription   Statut Modérateur Dernière intervention   7 878
 

Bonjour

De manière générale c'est une mauvaise idée de passer un mot de passe en paramètre dans une commande. En effet, cela stocke le mot de passe dans l'historique du shell (en clair) et le rend visible lors de l'exécution dans la table des processus.

De plus, tu sembles indiquer que tu as des problèmes avec les caractères spéciaux.

Je t'invite donc plutôt à créer un fichier ~/.my.cnf dans lequel ton login et ton mot de passe seront stockés (sur la machine qui exécute la commande mysql, donc dans ton cas, sur la machine accédée en ssh, dans le home de l'utilisateur auquel tu te connectes) :

[client]
user=mysqluser
password=mysqlpass

... puis à d'attribuer à ce fichier des droits restreints :

chmod 600 ~/.my.cnf

Sinon, dans l'absolu, il faudrait que dans ta commande initiale tu échappes les caractères de ton mot de passe qui ont un sens en bash (notamment $, à réécrire en \$).

echo "mot$de$passe"   # Écrit "mot" (en admettant que les variables de et passe n'existent pas)
echo "mot\$de\$passe" # Écrit "mot$de$passe"

Bonne chance

0
Fred
 

Super, merci à vous deux et notamment à @mamiemando qui me dépanne une nouvelle fois.
Je vois aussi que l’installation sous Debian 11 ne permet plus à l’utilisateur SQL root de se connecter avec un mot de passe, mais seulement via la socket... Mon pb venait certainement aussi de là....
Le my.cnf devient alors :

[client]
user = root
socket = /run/mysqld/mysqld.sock
0
mamiemando Messages postés 33766 Date d'inscription   Statut Modérateur Dernière intervention   7 878
 

Je vois aussi que l’installation sous Debian 11 ne permet plus à l’utilisateur SQL root de se connecter avec un mot de passe, mais seulement via la socket

Merci pour cette précision et pour ton retour très positif. Effectivement, pour sécuriser un serveur de base de données, limiter la provenance des clients fait partie des points importants.

Bonne continuation

1