Bagaimana cara terhubung ke database PostgreSQL jarak jauh di Ubuntu menggunakan pgAdmin3?

22

Saya mencoba mengatur database PostgreSQL pada mesin Ubuntu. Saya ingin dapat mengaksesnya menggunakan pgAdmin3 dari mesin jarak jauh. Bagaimana saya mengatur ini?

Saya telah menginstal database PostgreSQL di Ubuntu menggunakan:

sudo apt-get install postgresql

Dalam saya /etc/postgresql/9.1/main/pg_hba.confmiliki saya baris ini:

host    all    all    all    password

jadi ia harus menerima koneksi dari semua alamat-IPv4 dan kata sandi harus dikirim dalam teks yang jelas (ini untuk alasan pengembangan).

Jika saya menjalankan perintah ini untuk melihat layanan apa yang berjalan:

sudo netstat -tulpn

Saya dapat melihat baris-baris ini, yang menunjukkan bahwa PostgreSQL menerima koneksi pada port default:

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

Ketika saya mencoba menghubungkan ke server PostgreSQL ini dari komputer jarak jauh pada jaringan lokal yang sama, saya mendapatkan pesan kesalahan ini:

Server tidak mendengarkan

Server tidak menerima koneksi: perpustakaan koneksi melaporkan

tidak dapat terhubung ke server: Koneksi ditolak Apakah server berjalan pada host "10.0.1.7" dan menerima koneksi TCP / IP pada port 5432?

Saya menggunakan postgresnama pengguna dan tanpa kata sandi. Tapi saya juga coba dengan postgreskata sandi. Di server lokal saya bisa login menggunakan:

sudo -u postgres psql postgres

Bagaimana saya bisa terhubung ke database PostgreSQL yang berjalan di Ubuntu dari mesin jarak jauh menggunakan pgAdmin3?

Jonas
sumber

Jawaban:

25

Baris dalam laporan netstat Anda menunjukkan bahwa database hanya mendengarkan di localhost: 5432 (127.0.0.1) untuk koneksi tcp masuk.

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

Jadi itu hanya dapat menerima koneksi tcp lokal terlepas dari izin apa yang telah Anda tentukan di pg_hba.conf. pg_hba.conf hanya menentukan koneksi yang diizinkan, tetapi tidak menentukan antarmuka apa yang akan didengarkan layanan Anda.

Alamat yang didengarkan server ditentukan dengan GUC listen_addresses di postgresql.conf . Jika Anda ingin server mendengarkan koneksi jarak jauh, Anda harus menentukan ip yang ingin Anda dengarkan atau *mendengarkan semua antarmuka yang tersedia pada host.

Agar server postgresql Anda mendengarkan semua antarmuka di host, Anda harus memiliki baris berikut di postgresql.conf:

listen_addresses = '*'
dbenhur
sumber
tapi saya sudah menentukan alldalam pg_hba.conffile ... jadi itu harus menerima koneksi dari semua alamat ip.
Jonas
Mungkin saya bisa mengatakannya dengan lebih jelas. pg_hba tidak menentukan apa yang didengarkan database, hanya koneksi protokol / db / user / remote-addr yang diizinkan.
dbenhur
Ok, jadi bagaimana cara memperbaikinya? apakah Anda punya saran?
Jonas
1
Anda memperbaikinya dengan meletakkan baris listen_addresses = '*'di postgresql.conf dan memulai kembali server Anda.
dbenhur
Terima kasih, ini menyelesaikan masalah ini. Sekarang saya baru saja mendapat masalah dengan kata sandi default :(
Jonas