QGIS PostGIS SSH tuneli: TLS üçün server adını saxlayın
SSH yönləndirməsi QGIS-ə yerli port verir, lakin verilənlər bazası TLS üçün hələ də öz həqiqi adına ehtiyac duyur. hostaddr və loopback dinləyicisi ilə libpq xidmətindən istifadə edin.
Tunel qalxır, QGIS qoşulur və giriş verilənlər bazası hostu əvəzinə 127.0.0.1 adını çəkən sertifikat xətası ilə uğursuz olur. Cazibədar növbəti addım sslmode parametrini yumşaltmaqdır ki, bu yoxlamanı səssizləşdirir və əvvəldən istədiyiniz şəxsiyyət zəmanətini atır. Əsl problem yerli portun və serverin adının eyni sahədə saxlanmasıdır. libpq xidmət qeydi onları ayırır, beləliklə soket yönləndirilmiş porta gedir, TLS isə sertifikatda çap olunmuş adı yenə də yoxlayır.
Müştəri özünü nəyə qoşulmuş hesab edir
sslmode=verify-full rejimində libpq serverin təqdim etdiyi sertifikatı sorğu edilən host adı ilə müqayisə edir. Bu ad loopback ünvanı olduqda, sertifikat həqiqi verilənlər bazası hostu üçün etibarlı olsa da, müqayisə uğursuz olur. SSH yönləndirməsi baytları hansı soketin daşıdığını dəyişir, müştərinin gözləməli olduğu şəxsiyyəti yox. Bu iki fikir ayrıldıqdan sonra xəta artıq TLS nasazlığı kimi görünmür.
Yönləndirmə həm də avtorizasiya deyil. PostgreSQL SSH serverinin yaratdığı qoşulmaya yenə də öz qaydalarını tətbiq edir, ona görə hər hansı dəyişiklik etməzdən əvvəl nəqliyyat qatını və verilənlər bazası qatını ayrı saxlayın.
Yönləndirməni yalnız loopback-ə bağlayın
Dinləyici QGIS maşınında olmalı və başqa heç yerdə olmamalıdır. 127.0.0.1 ünvanını açıq şəkildə göstərmək onu digər interfeyslərdən kənarda saxlayır, bağlama ünvanı buraxıldıqda isə SSH müştərisinin şlüz ayarlarından asılı olaraq port xaricə açıla bilər.
ssh -N -L 127.0.0.1:15432:127.0.0.1:5432 [email protected]İkinci iki nöqtədən sonrakı təyinat SSH serverinin tərəfindən həll edilir, ona görə bu nümunə PostgreSQL-in sshd ilə eyni hostda olduğunu fərz edir; başqa maşında olan verilənlər bazası həmin ünvana və onun icazələrinə ehtiyac duyur. Sessiyanı -N ilə işə salın ki, heç bir qabıq açılmasın, host açarının yoxlanmasına toxunmayın və QGIS-i günahlandırmazdan əvvəl dinləyicinin göründüyünü təsdiqləyin. Port artıq istifadə olunursa, yönləndirmə sorğu vaxtı deyil, başlanğıcda uğursuz olur.
Adı və soketi bir xidmət qeydində saxlayın
Xidmət faylı eyni qoşulmaya yoxlama adı və fərqli soket təyinatı daşımağa imkan verir. Qeydi libpq-nin xidmətləri axtardığı yerə saxlayın və ya PGSERVICEFILE dəyişənini ona yönəldin.
[gis-via-ssh]
host=db.geo.example
hostaddr=127.0.0.1
port=15432
dbname=gisdb
user=gis_reader
sslmode=verify-full
gssencmode=disable
sslrootcert=/path/to/approved-root.crtBurada host sertifikat yoxlamaları üçün istifadə olunan şəxsiyyəti saxlayır, hostaddr isə paketləri yönləndirilmiş loopback portuna göndərir və bu quruluşun işləməsi üçün hər ikisi tələb olunur. gssencmode=disable əvvəlcə GSSAPI şifrələməsini danışıq edəcək buxilələrdə vacibdir, çünki bu yol təzəcə quraşdırılmış TLS ayarlarını nəzərə almır. Xidmətə QGIS-in PostgreSQL qoşulma dialoqundan adla istinad edin və parolu ortaq faylın içində deyil, adi sorğu vasitəsilə verin. Yuxarıdakı adlar və yollar yer tutucudur; onları öz təsdiqlənmiş dəyərlərinizlə əvəz edin.
Tuneldən sonra PostgreSQL hələ nəyi yoxlayır
Server SSH hostundan, bu quruluşda loopback-dən gələn qoşulmanı görür və onu host əsaslı autentifikasiya qaydaları ilə sıra ilə uyğunlaşdırır. Verilənlər bazası rolunuz yenə də autentifikasiya etməlidir və SSH girişi özlüyündə heç bir verilənlər bazası şəxsiyyəti vermir. Müştərinin fərz etdiyini deyil, serverin nə hesab etdiyini yoxlayın.
psql "service=gis-via-ssh" -c "select inet_server_addr(), current_user"İş bitdikdə yönləndirmə sessiyasını bağlayın; yerli qeyd bundan sonra işləməyi dayandırır və başqa heç nə dəyişmir. Bir verilənlər bazası yolu bütün GIS müştərisi üçün VPN deyil və ona belə yanaşmaq növbəti qoşulmanın səhv diaqnoz qoyulmasına səbəb olur.