Comment se connecter à une base de données PostgreSQL distante sur Ubuntu à l'aide de pgAdmin3?

22

J'essaie de configurer une base de données PostgreSQL sur une machine Ubuntu. Je voudrais pouvoir y accéder en utilisant pgAdmin3 à partir d'une machine distante. Comment configurer cela?

J'ai installé la base de données PostgreSQL sur Ubuntu en utilisant:

sudo apt-get install postgresql

Dans mon /etc/postgresql/9.1/main/pg_hba.confai-je cette ligne:

host    all    all    all    password

il doit donc accepter les connexions de toutes les adresses IPv4 et les mots de passe doivent être envoyés en texte clair (pour des raisons de développement).

Si j'exécute cette commande pour voir quels services sont en cours d'exécution:

sudo netstat -tulpn

Je peux voir ces lignes, cela montre que PostgreSQL accepte les connexions sur le port par défaut:

tcp    0    0    127.0.0.1:5432    0.0.0.0:*    LISTEN
3561/postgres

Lorsque j'essaie de me connecter à ce serveur PostgreSQL à partir d'un ordinateur distant sur le même réseau local, j'obtiens ce message d'erreur:

Le serveur n'écoute pas

Le serveur n'accepte pas les connexions: la bibliothèque de connexions rapporte

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

J'ai utilisé postgrescomme nom d'utilisateur et pas de mot de passe. Mais j'ai aussi essayé avec postgrescomme mot de passe. Sur le serveur local, je peux me connecter en utilisant:

sudo -u postgres psql postgres

Comment puis-je me connecter à une base de données PostgreSQL exécutée sur Ubuntu à partir d'une machine distante à l'aide de pgAdmin3?

Jonas
la source

Réponses:

25

La ligne de votre rapport netstat montre que la base de données écoute uniquement sur localhost: 5432 (127.0.0.1) les connexions TCP entrantes.

Proto Recv-Q Send-Q Local Address   Foreign Address  State   PID/Program name
tcp        0      0 127.0.0.1:5432  0.0.0.0:*        LISTEN  3561/postgres

Il ne peut donc accepter que les connexions TCP locales, quelles que soient les autorisations que vous avez spécifiées dans pg_hba.conf. pg_hba.conf spécifie uniquement les connexions autorisées, mais ne spécifie pas les interfaces que votre service écoutera.

Les adresses sur lesquelles le serveur écoute sont spécifiées avec les GUC listen_addresses dans postgresql.conf . Si vous souhaitez que le serveur écoute les connexions distantes, vous devez spécifier les adresses IP que vous souhaitez écouter ou *écouter sur toutes les interfaces disponibles sur l'hôte.

Pour que votre serveur postgresql écoute sur toutes les interfaces sur l'hôte, vous devez avoir la ligne suivante dans postgresql.conf:

listen_addresses = '*'
dbenhur
la source
mais je l'ai déjà spécifié alldans le pg_hba.conffichier ... il devrait donc accepter les connexions de toutes les adresses IP.
Jonas
J'aurais peut-être pu le dire plus clairement. pg_hba ne spécifie pas ce que la base de données écoute, mais uniquement les connexions protocol / db / user / remote-addr autorisées.
dbenhur
Ok, alors comment résoudre ce problème? Avez-vous des suggestions?
Jonas
1
vous le corrigez en mettant une ligne listen_addresses = '*'dans postgresql.conf et en redémarrant votre serveur.
dbenhur
Merci, cela a résolu ce problème. Maintenant, je viens de rencontrer des problèmes avec le mot de passe par défaut :(
Jonas