Estoy construyendo un script Bash para algunas tareas. Una de esas tareas es crear una base de datos MySQL desde el mismo script bash. Lo que estoy haciendo ahora es crear dos vars: uno para el nombre de usuario de la tienda y el otro para la contraseña de la tienda. Esta es la parte relevante de mi script:
MYSQL_USER=root
MYSQL_PASS=mypass_goes_here
touch /tmp/$PROY.sql && echo "CREATE DATABASE $DB_NAME;" > /tmp/script.sql
mysql --user=$MYSQL_USER --password="$MYSQL_PASS" < /tmp/script.sql
rm -rf /tmp/script.sql
Pero siempre aparece un error que dice que el acceso denegado para el usuario root sin CONTRASEÑA, ¿qué estoy haciendo mal? Necesito hacer lo mismo para PostgreSQL.
linux
mysql
bash
postgresql
shell-scripting
ReynierPM
fuente
fuente
echo "$MYSQL_PASS"
antes de pasarlo a lamysql
línea. ¿Tiene la contraseña correcta?ps wwaux
.Respuestas:
Tanto para MySQL como PostgreSQL puede especificar su usuario y contraseña en el archivo de configuración local. .my.cnf para MySQL y .pgpass para PostgreSQL. Estos archivos deben estar en su directorio de inicio (es decir, ~ / .my.cnf).
.my.cnf:
.pgpass:
Puede tener una entrada comodín aquí, sustituyendo cualquier campo por *******.
PD: ¡NO ESPECIFIQUE NUNCA UNA CONTRASEÑA EN LA LÍNEA DE MANDO! Esto puede ser perfectamente visible con ps si su sistema no está configurado para no mostrar procesos que pertenecen a otros usuarios.
@thinice: si desea crear esos archivos realmente seguros, debe hacer lo siguiente:
De esta forma, el archivo se crearía con permisos seguros desde el principio y ningún intruso tendría la posibilidad de robar su contraseña.
PostgreSQL se negará a usar el archivo con permisos superiores al 0600 de todos modos.
fuente
--defaults-extra-file=filename
. Esto puede ser útil si desea colocarlo en un lugar no estándar, o simplemente crear un archivo temporal. Se sospecha que es una opción similar con PostgreSQL, pero no estoy familiarizado con eso.0600
Esto hará el truco Gracias
fuente
¿Cómo ejecuto una línea de comando con una contraseña segura? usa el editor de configuración !!!
A partir de mysql 5.6.6 puede almacenar la contraseña en un archivo de configuración y luego ejecutar comandos cli como este ...
--login-path reemplaza las variables ... host, usuario Y contraseña. excelente derecho!
fuente
asegúrese de escribir su pase y no se escape
--defaults-extra-file = es algo bueno (tm) (c)
fuente
No ponga comillas alrededor de la contraseña porque si lo hace, las citas se consideran parte de la contraseña.
fuente
Pregunta similar existe en StackOverflow.
Para resumir mi respuesta desde allí.
Puede
export MYSQL_PWD=yourverysecretpassword
.La ventaja de este método sobre el uso de un archivo de configuración es que no necesita un archivo de configuración separado para mantenerse sincronizado con su script. Solo tiene que mantener el script.
No hay inconveniente en este método.
La contraseña no es visible para otros usuarios en el sistema (sería visible si está en la línea de comando). Las variables de entorno solo son visibles para el usuario que ejecuta el comando mysql y root.
La contraseña también será visible para cualquiera que pueda leer el script en sí, así que asegúrese de que el script esté protegido. Esto no es diferente a proteger un archivo de configuración. Todavía puede obtener la contraseña de un archivo separado si desea que el script se pueda leer públicamente (
export MYSQL_PWD=$(cat /root/mysql_password)
por ejemplo). Todavía es más fácil exportar una variable que construir un archivo de configuración.P.ej,
fuente