J'écris un script bash simple pour installer MySQL sur Ubuntu. Cependant, MySQL demande un mot de passe et une confirmation. Comment transmettre un mot de passe root? Y a-t-il un écho que je peux utiliser?Comment passer un mot de passe d'un script bash à aptitude pour installer mysql?
Répondre
regarder dans expect
Il peut être utilisé pour automatiser la plupart des sessions interactives, bien que je ne voudrais pas utiliser un mot de passe root
Attendez-vous est probablement exagéré. Regardez sur l'un des forums d'administration Debian ou Ubuntu - des choses comme FAI et al ont longtemps utilisé la préconfiguration pour les questions debconf. Vous devriez pouvoir l'utiliser ici aussi. Enfin, vous pourriez probablement aussi utiliser apt-get lui-même ou d'autres interfaces.
Merci pour le conseil sur attendre. Je n'ai rien trouvé en cherchant dans les forums d'admin Ubuntu, donc je suis parti avec expect. Comme vous pouvez le voir par l'horodatage de ce post, il m'a fallu 3 heures pour le faire fonctionner. Voici le code, je l'espère peut aider quelqu'un:
#!/bin/bash
apt-get update
apt-get install expect
VAR=$(expect -c '
spawn apt-get -y install mysql-server
expect "New password for the MySQL \"root\" user:"
send "PasswordHere\r"
expect "Repeat password for the MySQL \"root\" user:"
send "PasswordHere\r"
expect eof
')
echo "$VAR"
apt-get -y install mysql-client libmysqlclient15-dev
#For some reason important to restart - otherwise possible errors
/etc/init.d/mysql stop
/etc/init.d/mysql start
La meilleure façon de le faire est d'utiliser la variable d'environnement DEBIAN_FRONTEND et -q d'aptitude et drapeaux -y:
sudo DEBIAN_FRONTEND=noninteractive aptitude install -q -y mysql-server
Ou plus génériquement, en supposant que le mot de passe a été sudo pris en charge quelques-uns-faire:
#!/bin/bash
INSTALLER_LOG=/var/log/my-installer.log
installnoninteractive(){
sudo bash -c "DEBIAN_FRONTEND=noninteractive aptitude install -q -y $* >> $INSTALLER_LOG"
}
installnoninteractive mysql-server
Voici un extrait de mon script d'installation de nouveaux serveurs. Vous devriez être capable de le copier mot à mot, sauf pour le mot de passe.
Vous devrez l'exécuter en utilisant sudo si vous n'êtes pas déjà root.
#!/bin/bash
export DEBIAN_FRONTEND=noninteractive
apt-get -q -y install mysql-server
echo "Give mysql server time to start up before we try to set a password..."
sleep 5
mysql -uroot -e <<EOSQL "UPDATE mysql.user SET Password=PASSWORD('yourpasswordhere') WHERE User='root'; FLUSH PRIVILEGES;"
EOSQL
echo "Done setting mysql password."
D'autres réponses ont utilisé le -y qui fait que apt-get répond toujours oui aux questions. Le paramètre -q cache certains indicateurs de progression afin que vous puissiez envoyer la sortie dans un journal. Vous pouvez aussi utiliser -qq, qui vous donne automatiquement un -y. C'est dans la page de manuel d'apt-get.
La <<EOSQL
est une syntaxe bash heredoc pour la lisibilité.
J'ai eu le rôle heredoc de cette solution de ce type: http://padwasabimasala.posterous.com/non-interactive-scripted-mysql-install-on-ubu
La chose à retenir avec le heredoc est que les espaces avant la chaîne de fermeture, il se casse. Donc, ne pas indenter cette ligne. Voici une page sur la syntaxe heredoc: http://tldp.org/LDP/abs/html/here-docs.html
cela donne 'ERROR 1698 (28000): Accès refusé pour l'utilisateur 'root' @ 'localhost'' – user1623521
Peut-être y avait-il déjà un mot de passe root? Ce script ne s'authentifie pas avec un mot de passe car mysql n'a pas de mot de passe déjà défini. Vous pouvez ajouter le -p à l'invite ou -p $ PASS pour le fournir sur la ligne de commande. – Mnebuerquo
Il n'y avait pas, j'ai essayé avec une machine virtuelle propre. Je suppose que mysql n'accepte pas de mot de passe pour être vide. – user1623521
C'est tellement plus facile ..
install mysql on ubuntu without password prompt
sudo debconf-set-selections <<< 'mysql-server-5.1 mysql-server/root_password password your_password'
sudo debconf-set-selections <<< 'mysql-server-5.1 mysql-server/root_password_again password your_password'
sudo apt-get -y install mysql-server
Si votre shell ne supporte pas here-strings
(zsh, bash et ksh93 les soutenir), utilisez:
echo ... | sudo debconf-set-selections
Ceci est en fait la façon recommandée pour faire ça. Attendre des scripts ou attendre/dormir ne sont que des kludges qui se briseront dans les moments les plus malheureux. –
Je n'ai pas trouvé de documentation pour les noms de paramètres que je devais écraser. Mais j'ai installé le paquet de façon interactive une fois et utilisé 'sudo debconf-show MyPkg' pour lister les variables qui ont été définies. En regardant cette liste, il était assez évident que les deux noms de variables de mot de passe étaient pour mon paquet. –
Ce script a réussi lors de son lancement en tant que super-utilisateur:
#!/bin/bash
export temp_mysql_password="**********"
export DEBIAN_FRONTEND=noninteractive
debconf-set-selections <<< "mysql-server mysql-server/root_password password $temp_mysql_password"
debconf-set-selections <<< "mysql-server mysql-server/root_password_again password $temp_mysql_password"
debconf-set-selections <<< "mysql-server-5.6 mysql-server/root_password password $temp_mysql_password"
debconf-set-selections <<< "mysql-server-5.6 mysql-server/root_password_again password $temp_mysql_password"
apt-get update
apt-get -y upgrade
apt-get -y install mysql-server
- 1. Comment utiliser Expect pour entrer un mot de passe pour un script Perl?
- 2. une classe ou un script standard "mot de passe utilisateur oublié" dans un environnement php/mysql?
- 3. PHP & MySQL comparer mot de passe
- 4. Améliorer mon script de génération de mot de passe
- 5. Script pour l'écran bash
- 6. Comment changer le mot de passe root MySQL par défaut?
- 7. Comment script un changement de mot de passe pour une connexion au serveur SQL?
- 8. Script de ligne de commande pour créer un mot de passe utilisateur
- 9. Comment faire pour passer la sortie standard de bash?
- 10. Comment mot de passe pour protéger une case à cocher?
- 11. entrée de shell de script bash
- 12. Comment générer un mot de passe aléatoire, ou une URL temporaire, pour réinitialiser un mot de passe dans Zend Framework?
- 13. Fournir le mot de passe en utilisant le script Shell
- 14. Passer un tableau à mysql
- 15. C# Asp.Net 2.0 - Comment vérifier un mot de passe par rapport à un mot de passe d'annuaire actif?
- 16. Comment passer un nom d'utilisateur et un mot de passe à un service Web depuis une application iPhone?
- 17. Comment modifier un mot de passe Windows via asp?
- 18. Script batch pour envoyer des commandes à mySQL db?
- 19. Tuyauterie mot de passe pour smbpasswd
- 20. récupération de mot de passe pour drupal
- 21. Demander un mot de passe pour désinstaller/supprimer l'application
- 22. comment utiliser un nom d'utilisateur et un mot de passe pour lire un fichier en Java
- 23. Comment exécuter un script bash à partir du programme C++
- 24. Appel de script Bash pour AWK
- 25. Comment faire pour que svnant/svnkit demande un nom d'utilisateur/mot de passe
- 26. Modification du mot de passe de l'utilisateur Mac OS X par programme ou par script
- 27. expression régulière pour mot de passe
- 28. Impossible de convertir script Bash pour le script zsh
- 29. Comment installer les dépendances de script Perl?
- 30. Réinitialiser le mot de passe pour le compte administrateur renommé
J'ai essayé l'approche 'expect', mais j'ai continué à courir dans le problème de soumission subtile s. Le tour 'DEBIAN_FRONTEND = noninteractive' était exactement ce que je cherchais. Suivez-le avec un 'mysqladmin -u mot de passe root YOUR_DB_PASSWORD' et vous êtes à la maison en un tournemain. –
+1 pour quelque chose qui fonctionne réellement sur insatll propre d'Ubuntu 12.04 – Automatico