VPN psql ni bloklamaydi: sizning mijozi boshqa joyga ulanadi
psql va GUI mijozi bir mashinadan turli so'nggi nuqtalarga murojaat qilishi mumkin. VPN ni ayblashdan oldin host, soket, rol va TLS ni taqqoslang.
Ikkala mijoz ham bitta noutbukda, bir xil tunnel orqali o'tadi va faqat bittasi ulanadi. Bu taqqoslash VPN tanlab ishlayotganiga dalildek tuyuladi, holbuki ancha keng tarqalgan izoh ikki mijoz turli manzillarga murojaat qilishidir. GUI o'z hosti, porti, roli va TLS sozlamalarini saqlaydi va kerak bo'lganda jimgina SSH yo'naltirishini quradi, psql esa sizning shellingiz allaqachon o'rnatgan bo'lishi mumkin bo'lgan libpq standart qiymatlaridan ulanishni yig'adi. Ishlayotgan ulanishni qayta hosil qilish GUI sozlamalarini o'qish masalasi, tunnelni qayta o'rnatish emas.
Afsona: bitta ishlayotgan mijoz yo'lni isbotlaydi
Agar GUI ulansa, tunnel trafikni tashiydi va GUI isbotlaydigan yagona narsa shu. U psql qaysi manzilni hal qilishini, qaysi rol bilan autentifikatsiya qilishini yoki ochgan soketi mashinadan chiqishini aytmaydi. Yo'l umumiy; parametrlar emas.
Lokal yo'naltirish farqni kengaytiradi. GUI SSH orqali yo'naltirgan portda 127.0.0.1 ga ulanishi mumkin va bu tinglovchi faqat GUI sessiyasi davomida mavjud bo'ladi. Yo'naltirishsiz localhostga qaratilgan psql VPN bilan hech qanday aloqasi bo'lmagan rad etilgan ulanish oladi.
GUI haqiqatda ishlatadigan so'nggi nuqtani o'qing
Ulanish xususiyatlarini oching va to'rt qiymatni nusxalang: host, port, ma'lumotlar bazasi va rol. Keyin tunnel yorlig'ini qidiring, chunki SSH yo'naltirishi shaxsiy manzilni lokal portga aylantiradi va psql ga aytilishi kerak bo'lgan narsani o'zgartiradi.
| Setting | What the GUI holds | What psql uses when the value is absent |
|---|---|---|
| Destination | A saved hostname, sometimes behind a forward | A local Unix socket, not the remote endpoint |
| Port | The direct port or a forwarded local port | 5432, or the port from a service file |
| Role and database | Stored per connection profile | Your operating-system user name |
| TLS identity | Its own CA bundle and verification mode | Whatever PGSSLMODE or the service file says |
| Startup files | Not read at all | Read unless -X is passed |
Har bir qator boshqa qatlamda muvaffaqiyatsiz bo'ladi va olgan xabaringiz o'sha qatlamni nomlaydi. Saqlangan profilning do'stona nomini psql ga yopishtirish yuqoridagi qiymatlarning hech birini olib kelmaydi, xizmat nomi esa terminal hech qachon o'qimasligi mumkin bo'lgan fayl orqali hal qilinadi.
libpq sizning shellingizdan nimani meros oladi
psql libpq ustidagi yupqa mijoz va libpq boshqa hamma narsadan oldin muhitni o'qiydi. PGHOST, PGHOSTADDR, PGPORT, PGDATABASE, PGUSER, PGSERVICE va PGSSLMODE kabi o'zgaruvchilarning har biri ulanishning bir qismini boshqa tomonga yo'naltirishi mumkin. Ular yozilmaydi, meros olinadi, shuning uchun ishga tushirgan buyrug'ingizda hech biri ko'rinmaydi. Eksport qilingan PGSSLMODE ham buyruq satrida bir so'z aytmasdan mijoz nimani qabul qilishini o'zgartirishi mumkin.
Bu o'zgaruvchilardan ikkitasi birinchi navbatda shubha uyg'otadi. PGHOSTADDR nomlar hal qilinishini chetlab o'tuvchi raqamli manzil beradi, host nomi esa hali ham sertifikat identifikatsiyasini belgilaydi, PGSERVICE esa xizmat faylidan host, ma'lumotlar bazasi va TLS tanlovlarini tortib oladi. Buni tuzatish uchun butun muhitni to'kib tashlash yomon odat, chunki unda parollar va aloqasiz tokenlar bo'lishi mumkin; o'rniga sizga muhim bo'lgan o'zgaruvchilarni tanlang.
host va hostaddr ikkalasini ham qoldirmaslik tarmoq manzili o'rniga Unix domen soketini tanlaydi. Shuning uchun -h bo'lmagan psql chaqiruvi lokali muvaffaqiyatli bo'lishi yoki soket xatosi bilan muvaffaqiyatsiz bo'lishi mumkin, GUI ishlatadigan yo'lga hech tegmasdan.
Xuddi shu parametrlarni qo'lda yuboring
GUI qiymatlari qo'lingizda bo'lsa, ularni aniq uzating va bekor qilishlarni qo'shishi mumkin bo'lgan ishga tushirish faylini o'tkazib yuboring. Quyidagi ulanish qatori namunadir: so'nggi nuqta, port, ma'lumotlar bazasi va rolni administratoringiz tasdiqlagan qiymatlar bilan almashtiring va allaqachon ishlayotgan ishonch konfiguratsiyasini saqlab qoling.
psql -X "host=db.internal.example port=6432 dbname=orders user=report_ro sslmode=verify-full connect_timeout=5"Bu buyruqdagi uchta tafsilot ataylab qilingan. -X psql ning ishga tushirish faylini bostiradi, ammo libpq muhitini yoki xizmat ta'rifini bostiradi emas. connect_timeout=5 bo'sh yo'l terminalni daqiqalar davomida osib qo'yishini oldini oladi. sslmode=verify-full sertifikat va host nomi tekshiruvlarini yoqilgan holda tutadi, TLS xatosi paydo bo'lganda odamlar aynan shu qismni o'chiradi.
Agar tasdiqlangan so'nggi nuqta pooler orqasida bo'lsa, port 6432 va port 5432 bir xil ma'lumotlarga turli server identifikatsiyalari orqali yetishi mumkin va tekshiruv ma'lumotlar bazasining emas, pooler nomi tufayli muvaffaqiyatsiz bo'lishi mumkin. Rejimni zaiflashtirish o'rniga ulanish qatoridagi nomni tuzating.
Keyingi qadamni xato xabari tanlasin
Muvaffaqiyatsizlik matni urinish qanchalik uzoqqa borganini aytadi va bu tunnel haqidagi har qanday taxmindan yaxshiroq. Hal qilinmaydigan nom soket paydo bo'lishidan oldin muvaffaqiyatsiz bo'ladi, vaqt tugashi yo'l yoki firewall paketlarni tashlaganini bildiradi, rad etish nimadir javob berib rad etganini, autentifikatsiya xatosi esa tarmoq allaqachon ishlaganini bildiradi.
psql -X -w "host=db.internal.example port=6432 dbname=orders user=report_ro sslmode=verify-full connect_timeout=5" -c '\conninfo'
env | grep -E '^PG'
psql --version\conninfo chiqishini GUI ning jonli sessiyasi bilan taqqoslang: bir xil host, bir xil port, bir xil rol, bir xil TLS holati. Bu to'rttasi mos kelsa, VPN aytadigan boshqa gaplari qolmaydi. Ular mos kelmaguncha, tunneldagi har bir qo'shimcha o'zgarish terminal hech qachon qilmagan ulanish haqidagi taxmindir.