¿Cómo puedo llamar a psql para que no solicite una contraseña ?
Esto es lo que tengo:
psql -Umyuser < myscript.sql
Sin embargo, no pude encontrar el argumento que pasa la contraseña, por lo que psql siempre lo solicita.
postgresql
psql
Axel Fontaine
fuente
fuente
Respuestas:
Hay varias formas de autenticarse en PostgreSQL. Es posible que desee investigar alternativas a la autenticación de contraseña en https://www.postgresql.org/docs/current/static/client-authentication.html .
Para responder a su pregunta, hay algunas formas de proporcionar una contraseña para la autenticación basada en contraseña. La forma obvia es a través de la solicitud de contraseña. En lugar de eso, puede proporcionar la contraseña en un archivo pgpass o mediante la
PGPASSWORD
variable de entorno. Ver estos:No hay ninguna opción para proporcionar la contraseña como argumento de línea de comando porque esa información a menudo está disponible para todos los usuarios y, por lo tanto, no es segura. Sin embargo, en entornos Linux / Unix, puede proporcionar una variable de entorno para un solo comando como este:
fuente
fuente
Puede agregar esta línea de comando al comienzo de su script:
fuente
export PGPASSWORD=[password]
funcionó#!/bin/sh set PGPASSWORD = postgres psql -h 192.168.3.200 -U postgres incx_um << EOF DELETE FROM usrmgt.user_one_time_codes WHERE time < NOW() - INTERVAL '30 minute' EOF
PGPASSWORD=password
.Si tiene la intención de tener múltiples conexiones de host / base de datos, el archivo ~ / .pgpass es el camino a seguir.
Pasos:
vim ~/.pgpass
o similar. Ingrese su información en el siguiente formato:hostname:port:database:username:password
No agregue comillas alrededor de los valores de su campo. También puede usar * como comodín para sus campos de puerto / base de datos.chmod 0600 ~/.pgpass
para que psql no lo ignore en silencio.alias postygresy='psql --host hostname database_name -U username'
los valores deben coincidir con los que ingresó en el archivo ~ / .pgpass.. ~/.bashrc
o similar.Tenga en cuenta que si tiene un conjunto de variables PGPASSWORD = '' de exportación, tendrá prioridad sobre el archivo.
fuente
chmod 600
en el archivo, de lo contrariopsql
lo ignorará en silencio (de acuerdo con los documentos).Esta podría ser una pregunta antigua, pero hay un método alternativo que puede usar que nadie ha mencionado. Es posible especificar la contraseña directamente en el URI de conexión. La documentación se puede encontrar aquí , alternativamente aquí .
Puede proporcionar su nombre de usuario y contraseña directamente en el URI de conexión proporcionado a
psql
:fuente
PGPASSWORD
Si tiene problemas en Windows como yo (estoy usando Windows 7 de 64 bits) y
set PGPASSWORD=[Password]
no funcionó.Entonces, como dijo Kavaklioglu en uno de los comentarios,
Tendrá que guardar esto en la parte superior del archivo, o antes de cualquier uso, por lo que se establece antes de ser llamado.
Ciertamente funciona en Windows :)
fuente
export PGPASSWORD=[password]
no funciona para mí usando la línea de comando (cmd.exe) en absoluto. ¿Estás seguro de que no estabas usando cygwin o algo similar?Debe crear un archivo de contraseña: consulte http://www.postgresql.org/docs/9.0/interactive/libpq-pgpass.html para obtener más información.
fuente
Dadas las preocupaciones de seguridad sobre el uso de la variable de entorno PGPASSWORD, creo que la mejor solución general es la siguiente:
Hay un par de puntos de nota aquí. El paso 1 está ahí para evitar la intrusión con el archivo ~ / .pgpass del usuario que pueda existir. También debe asegurarse de que el archivo tenga permisos 0600 o menos.
Algunos han sugerido aprovechar bash para atajar esto de la siguiente manera:
Esto usa la sintaxis <() para evitar la necesidad de escribir los datos en un archivo real. Pero no funciona porque psql comprueba qué archivo se está utilizando y arrojará un error como este:
fuente
Se puede hacer simplemente usando PGPASSWORD. Estoy usando psql 9.5.10. En su caso la solución sería
PGPASSWORD=password psql -U myuser < myscript.sql
fuente
Basándose en la respuesta de mightybyte para aquellos que no se sienten cómodos con las secuencias de comandos de shell * nix , aquí hay una secuencia de comandos que funciona:
El signo de dólar doble (
$$
) en la/tmp/pgpasswd$$
línea 2 agrega el número de ID del proceso al nombre del archivo, de modo que este script se puede ejecutar más de una vez, incluso simultáneamente, sin efectos secundarios.Tenga en cuenta el uso del
chmod
comando en la línea 4: al igual que el error " no es un archivo sin formato " que podría describir byybyte , también hay un error de " permisos " si esto no se hace.En la línea 7, no tendrá que usar el indicador
-h
myserver ,-p
myport o-U
jdoe si usa los valores predeterminados ( localhost : 5432 ) y solo tiene un usuario de la base de datos. Para varios usuarios, (pero la conexión predeterminada) cambie esa línea aNo olvide hacer que el script sea ejecutable con
ACTUALIZAR:
Tomé RichVel consejos 's e hice el archivo ilegible antes de poner la contraseña en él. Eso cierra un pequeño agujero de seguridad. ¡Gracias!
fuente
mktemp
para crear un archivo temporal en lugar de crear su propio esquema de nombres. Crea un nuevo archivo temporal (llamado algo así como/tmp/tmp.ITXUNYgiNh
en Linux y/var/folders/xx/7gws2yy91vn9_t2lb8jcr2gr0000gn/T/tmp.QmbVOQk4
MacOS X) e imprime su nombre en stdout.chmod 600
después de crear el archivo, pero antes de escribirle la contraseña. Tal como está escrito, una secuencia de comandos maliciosa en el servidor podría intentar continuamente leer archivos de este formato y, a veces, podría obtener la contraseña. Además, si esta secuencia de comandos se interrumpe por alguna razón, el archivo se dejaría en el disco; escribir untrap
controlador de shell resolvería esto. Dado que no es trivial escribir un script seguro como este, recomiendo usar en suexport PGPASSWORD
lugar.PGPASSWORD
ha quedado en desuso en 9.3.Una alternativa al uso de
PGPASSWORD
la variable de entorno es usar unaconninfo
cadena de acuerdo con la documentaciónfuente
Puede encontrar esto útil: línea de comando PSQL de Windows: ¿hay alguna manera de permitir el inicio de sesión sin contraseña?
fuente
8 años después ...
En mi Mac, tuve que poner una línea en el archivo
~/.pgpass
como:Ver también:
https://www.postgresql.org/docs/current/libpq-pgpass.html
https://wiki.postgresql.org/wiki/Pgpass
fuente
Creo que psql muestra la solicitud de contraseña incluso si define la variable PGPASSWORD, pero puede especificar la opción -w para que psql omita la solicitud de contraseña.
fuente
Use -w en el comando: psql -h localhost -p 5432 -U usuario -w
fuente