Cuando instala PostgreSQL, por defecto no se permite la conexión a la base de datos usando TCP/IP.
Cuando intenta conectarse desde un cliente a una base de datos PostgreSQL remota usando el comando psql, es posible que reciba el mensaje de error "psql:no se pudo conectar al servidor:Conexión rechazada".
En el siguiente ejemplo, desde una máquina cliente, intentamos conectarnos a una base de datos PostgreSQL que se ejecuta en el servidor 192.168.102.1. Como puede ver en el resultado, dice claramente que la base de datos PostgreSQL remota no acepta la conexión.
# psql -U postgres -h 192.168.102.1 psql: could not connect to server: Connection refused Is the server running on host "192.168.102.1" and accepting TCP/IP connections on port 5432?
Para habilitar la conexión TCP/IP para la base de datos PostgreSQL, debe seguir los dos pasos que se mencionan a continuación.
1. Modifique pg_hba.conf para agregar el registro de autenticación del cliente
En el servidor de base de datos de PostgreSQL, de manera predeterminada, notará los siguientes registros hacia el final de /var/lib/pgsql/data/pg_hba.conf. Como se indica a continuación, acepta conexiones solo desde el servidor local.
# IPv4 local connections: host all all 127.0.0.1/32 trust # IPv6 local connections: host all all ::1/128 ident
Agregue la siguiente línea al servidor pg_hba.conf. Esto permitirá la conexión desde la dirección IP "192.168.101.20" (Este es el cliente en nuestro ejemplo). Si desea permitir la conexión desde varias máquinas cliente en una red específica, especifique aquí la dirección de red en el formato de dirección CIDR.
# vi /var/lib/pgsql/data/pg_hba.conf host all all 192.168.101.20/24 trust
Los siguientes son varios formatos de registro de autenticación de clientes admitidos en el archivo pg_hba.conf. Estamos usando el formato #2 de esta lista.
- método de autenticación del usuario de la base de datos local [opción de autenticación]
- método de autenticación de la dirección CIDR del usuario de la base de datos del host [opción de autenticación]
- método de autenticación de la dirección CIDR del usuario de la base de datos hostssl [opción de autenticación]
- método de autenticación de la dirección CIDR del usuario de la base de datos hostnossl [opción de autenticación]
En lugar del formato de "dirección CIDR", también puede especificar la dirección IP y la máscara de red en campos separados utilizando el siguiente formato de registro.
- usuario de la base de datos del host dirección IP máscara IP método de autenticación [opción de autenticación]
- usuario de la base de datos hostssl dirección IP máscara IP método de autenticación [opción de autenticación]
- usuario de la base de datos hostnossl dirección IP máscara IP método de autenticación [opción de autenticación]
2. Cambie la dirección de escucha en postgresql.conf
En el servidor de la base de datos PostgreSQL, de forma predeterminada, la dirección de escucha será localhost en el archivo postgresql.conf como se muestra a continuación.
# grep listen /var/lib/pgsql/data/postgresql.conf listen_addresses = 'localhost'
Modifique esta línea y proporcione *. Si tiene varias interfaces en el servidor, también puede especificar una interfaz específica para escuchar.
# grep listen /var/lib/pgsql/data/postgresql.conf listen_addresses = '*'
3. Probar la conexión remota
Ahora, inicie sesión en la máquina cliente 192.168.101.20 y realice la conexión remota psql al servidor de la base de datos PostgreSQL (192.168.102.1) como se muestra a continuación. Esta vez debería funcionar.
# psql -U postgres -h 192.168.102.1 Welcome to psql 8.1.11 (server 8.4.18), the PostgreSQL interactive terminal. postgres=#
Además, si no desea especificar el nombre de host en el parámetro de la línea de comando cada vez, puede configurar la dirección IP de la base de datos PostgreSQL remota en el nombre de la variable de entorno PGHOST como se muestra a continuación.
# export PGHOST=192.168.102.1 # psql -U postgres Welcome to psql 8.1.11 (server 8.4.18), the PostgreSQL interactive terminal. postgres=#