ฉันต้องการเข้าถึงฐานข้อมูล postgresql จากเครื่องระยะไกลบน VPS ที่ DigitalOcean ทำงาน 12.10 และ postgresql 9.1
ฉันจะทำสิ่งนี้ได้อย่างไร ฉันสังเกตว่าพอร์ต 5432 ปิดฉันจะเปิดได้อย่างไร
ฉันต้องการเข้าถึงฐานข้อมูล postgresql จากเครื่องระยะไกลบน VPS ที่ DigitalOcean ทำงาน 12.10 และ postgresql 9.1
ฉันจะทำสิ่งนี้ได้อย่างไร ฉันสังเกตว่าพอร์ต 5432 ปิดฉันจะเปิดได้อย่างไร
คำตอบ:
หากต้องการเปิดพอร์ต 5432 ให้แก้ไข/etc/postgresql/9.1/main/postgresql.conf
และเปลี่ยน
listen_addresses='localhost'
ไปยัง
listen_addresses='*'
และรีสตาร์ท DBMS ของคุณ
invoke-rc.d postgresql restart
ตอนนี้คุณสามารถเชื่อมต่อกับ
$ psql -h hostname -U username -d database
หากคุณไม่สามารถพิสูจน์ตัวเองได้คุณต้องให้สิทธิ์การเข้าถึงแก่ผู้ใช้ในฐานข้อมูลของคุณ
แก้ไขของคุณ
/etc/postgresql/9.1/main/pg_hba.conf
และเพิ่ม
host all all all md5
(นี่เป็นการเปิดกว้างสำหรับการควบคุมที่เข้มงวดศึกษาเอกสาร pg_hba.confและปรับตามความต้องการของคุณ)
หลังจากนี้คุณจะต้องโหลดซ้ำอีกครั้ง
invoke-rc.d postgresql reload
ฉันไม่จำเป็นต้องพูดถึงว่านี่เป็นการกำหนดค่าพื้นฐานตอนนี้คุณควรคิดถึงการปรับเปลี่ยนไฟร์วอลล์ของคุณและปรับปรุงความปลอดภัยของ DBMS ของคุณ
host <database> <user> <remote_client_IPaddress>/24 md5
สิ่งนี้ไม่สามารถใช้งานได้อีกต่อไปหากเคย:
โฮสต์ทั้งหมด * md5
บรรทัดที่เป็นไปได้ที่ถูกต้องสำหรับสิ่งนี้คือ:
โฮสต์ทุกช่วง 0.0.0.0/0 md5 # ipv4
โฮสต์ทั้งหมด :: 0/0 md5 # ช่วง ipv6
โฮสต์ทั้งหมดทั้งหมด md5 #all ip
host all all all md5
จะทำงานได้ดี? ถูกต้อง? ปัญหาความปลอดภัยใด ๆ
สำหรับข้อความ "เซิร์ฟเวอร์ไม่ฟัง" ที่เกิดขึ้นกับฉันคือฉันไม่ลบ # ในไฟล์เก็บถาวร postgresql.conf ฉันหมายถึง:
# listen_addresses = 'localhost'
ไปที่:
listen_addresses = '*'
(ขออภัยสำหรับภาษาอังกฤษของฉัน)
คำตอบที่ได้รับการโหวตสูงสุดและเป็นที่ยอมรับนั้นมีความปลอดภัยอย่างมาก วิธีนี้ถูกปิดใช้งานโดยค่าเริ่มต้นด้วยเหตุผลที่ดี
ใช้การส่งต่อพอร์ตบนเครื่องด้วยssh
:
ssh -L local_port:localhost:foreign_port user@server
เริ่มการส่งต่อพอร์ต:
ssh -L 5432:localhost:5432 user@your-server.com
#or
ssh -L 5432:127.0.0.1:5432 user@your-server.com
(เปลี่ยนพอร์ตในประเทศและต่างประเทศให้เหมาะสมกับการกำหนดค่าของคุณ)
จากนั้นคุณสามารถเชื่อมต่อกับฐานข้อมูลโดยตรงจากคอมพิวเตอร์ของคุณ:
psql -U db_user -p local_port -l