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?

Øyvind
fuente
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.

Daniel Vérité
fuente
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

Kethryweryn
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).

mrlinux
fuente
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
pLumo
fuente