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

Fermé
Fred - Modifié le 14 avril 2023 à 14:09
mamiemando Messages postés 33435 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 18 décembre 2024 - 24 avril 2023 à 18:30

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 18756 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 18 décembre 2024 5 622
11 avril 2023 à 10:40

hello

essayer

ssh ***@*** 'gunzip < /home/nexcloud.sql.gz | mysql -u root -p nextcloud'
0
mamiemando Messages postés 33435 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 18 décembre 2024 7 809
Modifié le 14 avril 2023 à 14:12

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

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 33435 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 18 décembre 2024 7 809
24 avril 2023 à 18:30

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