Acceso remoto a la base de datos postgresql


46

Necesito acceder a una base de datos postgresql desde una máquina remota en un VPS en DigitalOcean con 12.10 y postgresql 9.1.

¿Cómo hago esto? Noté que el puerto 5432 está cerrado, ¿cómo abro esto?


1
Siga los pasos mencionados en javabypatel.blogspot.in/2015/07/… y cambie el número de puerto presente en el archivo postgresql.conf. después de cambiar el puerto, reinicie el servidor PostgreSQL.
— Jayesh

La url publicada por @Jayesh hizo el truco. Seguí las instrucciones e hice exitosamente que una de mis computadoras de desarrollo se conectara a otra (desde Windows con pgAdmin4 a Ubuntu 18.04 postgresql 10.9)
— EAmez

Respuestas:


79

Para abrir el puerto 5432 edite su /etc/postgresql/9.1/main/postgresql.confy cambie

listen_addresses='localhost'

a

listen_addresses='*'

y reinicie su DBMS

invoke-rc.d postgresql restart

ahora puedes conectarte con

$ psql -h hostname -U username -d database

Si no puede autenticarse, debe otorgarle a su usuario derechos de acceso a su base de datos.

Edita tu

/etc/postgresql/9.1/main/pg_hba.conf

y añadir

host all all all md5

(Esto es para un acceso abierto. Para un control más estricto, consulte la documentación de pg_hba.conf y ajústelo según sus necesidades).

De aquí en adelante también necesitarás una recarga

invoke-rc.d postgresql reload

No necesito mencionar que esta es una configuración básica, ahora debería pensar en modificar su firewall y mejorar la seguridad de su DBMS.


44
En particular, debe habilitar SSL.
— Craig Ringer

Okey, intenté esto, pero cuando trato de conectarme usando pgAdmin desde mi computadora, aparece "El servidor no escucha". Agregué a iptables, y cuando ejecuto iptables -L lo siguiente muestra: ACEPTAR tcp - en cualquier lugar en cualquier lugar tcp dpt: postgresql Al verificar la IP y el PUERTO en este sitio ( yougetsignal.com/tools/open-ports ), dice el el puerto está cerrado
— Øyvind

2
está escuchando el servidor? consulte connetstat -nlt|grep :5432

1
Insertaría la fila del host de una manera más estricta:host <database> <user> <remote_client_IPaddress>/24 md5
— gc5

Para Postgresql versión 9.5, es posible que deba reiniciar el servidor antes de que listen_addresses surta efecto.
— Heather92065

26

Esto ya no funciona, si alguna vez lo hizo:

alojar todos todos * md5

Las líneas correctas posibles para esto son:

alojar todos todos 0.0.0.0/0 md5 # rango ipv4

host all all :: 0/0 md5 # rango ipv6

host todos todos todos md5 #todos ip

Fuente


44
Esto definitivamente hizo el truco. La respuesta anterior definitivamente no funcionó.
— Mike

Por favor, @Mike expresa lo que es correcto: host all all all md5¿funcionará bien? ¿Es correcto? algun problema de seguridad?
— Peter Krauss

@peterkrauss Sí, host todos todos todos md5 trabajó para mí. ¿Problema de seguridad? Por supuesto que sí, pero por lo que estaba haciendo estaba bien. (Red interna)
— Mike

3

Para el mensaje "el servidor no escucha", eso me sucedió a mí, que no borro # en el archivo postgresql.conf, quiero decir:

# listen_addresses = 'localhost'

a:

listen_addresses = '*'

(Lo siento por mi ingles).


0

La respuesta más votada y aceptada tiene graves implicaciones de seguridad. Este método está deshabilitado de forma predeterminada por buenas razones.

Utilice mejor el reenvío de puertos locales con ssh:

ssh -L local_port:localhost:foreign_port user@server

Comience el reenvío de puertos:

ssh -L 5432:localhost:5432 user@your-server.com
#or
ssh -L 5432:127.0.0.1:5432 user@your-server.com

(Cambie los puertos locales y extranjeros para adaptarse a su configuración).

Luego puede conectarse directamente a la base de datos desde su computadora local:

psql -U db_user -p local_port -l
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.