web-dev-qa-db-fra.com

"psql: impossible de se connecter au serveur: connexion refusée" Erreur lors de la connexion à une base de données distante

J'essaie de me connecter à une base de données Postgres installée sur un serveur distant à l'aide de la commande suivante:

psql -h Host_ip -U db_username -d db_name

C'est l'erreur qui se produit:

psql: impossible de se connecter au serveur: connexion refusée Le serveur fonctionne-t-il sur l'hôte "" et accepte-t-il Connexions TCP/IP sur le port 5432?

  1. La version installée de Postgres est 9.4.
  2. Système d'exploitation hôte: Ubuntu 15.04
  3. Système d'exploitation client: Centos 7

J'ai déjà essayé ce qui suit, mais le problème reste non résolu:

  1. Fichier pg_hba.conf édité à inclure 

Tout héberger 0.0.0.0/0 md5

  1. Edité 'postgresql.conf' et modifié le paramètre d'écoute en

listen_addresses = '*'

  1. Service postgres redémarré.
  2. Pare-feu désactivé et iptables sur l'hôte et le client.
  3. J'ai vérifié en exécutant la commande psql localement et cela a fonctionné.
  4. J'ai essayé la deuxième solution donnée dans cette question . Exécuter nmap m'a donné la sortie suivante:

Starting Nmap 6.47 ( http://nmap.org ) at 2015-09-07 18:08 IST Nmap scan report for 10.17.250.250 Host is up (0.0000040s latency). Not shown: 997 closed ports PORT STATE SERVICE 22/tcp open ssh 25/tcp open smtp 80/tcp open http

Est-ce que je manque quelque chose? J'espère que quelqu'un peut aider.

25
Poonam Anthony
cd /etc/postgresql/9.x/main/

ouvrir le fichier nommé postgresql.conf

Sudo vi postgresql.conf

ajouter cette ligne à ce fichier 

listen_addresses = '*'

puis ouvrez le fichier nommé pg_hba.conf

Sudo vi pg_hba.conf

et ajoutez cette ligne à ce fichier 

Host  all  all 0.0.0.0/0 md5

Il permet l'accès à toutes les bases de données pour tous les utilisateurs avec un mot de passe crypté.

redémarrez votre serveur

Sudo /etc/init.d/postgresql restart
61
Thameem

Vérifiez le port défini dans postgresql.conf. Mon installation de postgres 9.4 utilise le port 5433 au lieu de 5432

11
jorge Godoy

J'ai eu du mal à résoudre ce problème lorsque je tentais de me connecter à distance à une nouvelle installation PostgreSQL sur mon Raspberry Pi. Voici le détail de ce que j'ai fait pour résoudre ce problème:

Commencez par ouvrir le fichier de configuration PostgreSQL et assurez-vous que le service écoutera en dehors de localhost.

Sudo [editor] /etc/postgresql/[version]/main/postgresql.conf

J'ai utilisé nano, mais vous pouvez utiliser l'éditeur de votre choix et, même si j'ai la version 9.1 installée, ce répertoire correspond à la version que vous avez installée.

Recherchez la section intitulée "Connexions et authentification". Le premier paramètre devrait être 'listen_addresses', et pourrait ressembler à ceci:

#listen_addresses = 'localhost'     # what IP address(es) to listen on;

Les commentaires à droite donnent de bonnes instructions sur la façon de modifier ce champ. L'utilisation du '*' suggéré pour tous fonctionnera bien.

Veuillez noter que ce champ est commenté avec #. Selon les commentaires, le paramètre par défaut est 'localhost'. Il ne suffit donc pas de changer la valeur en '*', vous devez également supprimer le commentaire en supprimant le # qui précède. 

Cela devrait maintenant ressembler à ceci:

listen_addresses = '*'         # what IP address(es) to listen on;

Vous pouvez également vérifier le paramètre suivant, "port", pour vous assurer que vous vous connectez correctement. 5432 est la valeur par défaut. Il s'agit du port auquel psql tentera de se connecter si vous n'en spécifiez pas. 

Enregistrez et fermez le fichier, puis ouvrez le fichier de configuration Authentification du client, qui se trouve dans le même répertoire:

Sudo [editor] /etc/postgresql/[version]/main/pg_hba.conf

Je recommande de lire le fichier si vous souhaitez restreindre l'accès, mais pour les connexions ouvertes de base, vous allez au bas du fichier et ajoutez une ligne comme celle-ci:

Host all all all md5

Vous pouvez appuyer sur Tab au lieu de espace pour aligner les champs avec les colonnes existantes si vous le souhaitez.

Personnellement, j'ai plutôt ajouté une ligne qui ressemblait à ceci:

Host [database_name] pi 192.168.1.0/24 md5

Cela limite la connexion à un seul utilisateur et à la seule base de données du sous-réseau du réseau local.

Une fois que vous avez enregistré les modifications dans le fichier, vous devez redémarrer le service pour les implémenter.

Sudo service postgresql restart

Maintenant, vous pouvez vérifier que le service écoute ouvertement sur le bon port en utilisant la commande suivante:

Sudo netstat -ltpn

Si vous ne l'exécutez pas comme élevé (en utilisant Sudo), les noms des processus écoutant ces ports ne vous seront pas communiqués.

L'un des processus doit être Postgres et l'adresse locale doit être ouverte (0.0.0.0) et ne pas être limitée au trafic local (127.0.0.1). S'il n'est pas ouvert, vous devrez alors revérifier vos fichiers de configuration et redémarrer le service. Vous pouvez à nouveau confirmer que le service écoute sur le bon port (la valeur par défaut est 5432, mais votre configuration pourrait être différente).

Enfin, vous pourrez vous connecter avec succès depuis un ordinateur distant en utilisant la commande suivante:

psql -h [server ip address] -p [port number, optional if 5432] -U [postgres user name] [database name]
2
aherocalledFrog

Assurez-vous que les paramètres sont appliqués correctement dans le fichier de configuration.

vim /etc/postgresql/x.x/main/postgresql.conf

Essayez ce qui suit pour voir les journaux et trouver votre problème.

tail /var/log/postgresql/postgresql-x.x-main.log
2
Amirio

Dans mon cas, je n'ai pas modifié la stratégie de sécurité par défaut Azure dans le portail de gestion. L'original est autorisé au port 22 et les autres sont tous refusés. Tant que j'ajoute le port 5432, tout devient bon.

0
new2cpp

Je pense que vous utilisez le nom de la machine au lieu de l'ip de l'hôte.

J'ai eu la même erreur quand j'ai essayé avec le nom de la machine. En effet, il est uniquement autorisé lorsque le client et l'hôte se trouvent sur le même réseau et que le même système d'exploitation est installé.

0
Mohanavel T

Ce qui suit m'a aidé sur macos Mojave:

$Sudo mv /usr/local/var/postgres /usr/local/var/postgres.save
$brew uninstall postgres
$brew install postgres
0
Meshack Mbuvi