Tunelis ceļas, QGIS pieslēdzas, un pieteikšanās mirst ar sertifikāta kļūdu, kas nosauc 127.0.0.1, nevis datubāzes resursdatoru. Nākamais kārdinošais solis ir atslābināt sslmode, kas apklusina pārbaudi un izmet identitātes garantiju, kuru jūs tieši gribējāt. Īstā problēma ir tā, ka lokālais ports un servera nosaukums tiek glabāti vienā laukā. libpq pakalpojuma ieraksts tos atdala, tāpēc ligzda dodas uz pāradresēto portu, kamēr TLS joprojām pārbauda sertifikātā iespiesto nosaukumu.

Kam klients domā, ka pieslēdzas

Ar sslmode=verify-full libpq salīdzina servera uzrādīto sertifikātu ar pieprasīto resursdatora nosaukumu. Ja šis nosaukums ir loopback adrese, salīdzinājums neizdodas, lai gan sertifikāts ir derīgs īstajam datubāzes resursdatoram. SSH pāradresācija maina to, kura ligzda pārvadā baitus, nevis identitāti, ko klientam vajadzētu gaidīt. Kad šīs divas idejas ir atdalītas, kļūda vairs neizskatās pēc TLS bojājuma.

Pāradresācija arī nav atļauja. PostgreSQL joprojām piemēro savus noteikumus savienojumam, ko veido SSH serveris, tāpēc turiet transporta slāni un datubāzes slāni atsevišķi, pirms kaut ko maināt.

Piesaistiet pāradresāciju tikai loopback

Klausītājam jābūt QGIS mašīnā un nekur citur. Nepārprotama 127.0.0.1 norāde tur to prom no citām saskarnēm, savukārt izlaista saistīšanas adrese var atklāt portu atkarībā no SSH klienta vārtejas iestatījumiem.

ssh -N -L 127.0.0.1:15432:127.0.0.1:5432 [email protected]

Galamērķis pēc otrā kols ir jāatrisina SSH servera pusē, tāpēc šis piemērs pieņem, ka PostgreSQL atrodas tajā pašā resursdatorā kā sshd; datubāzei citā mašīnā ir vajadzīga šī adrese un tās atļaujas. Sāciet sesiju ar -N, lai netiktu atvērta neviena čaula, neaiztieciet resursdatora atslēgas pārbaudi un pārliecinieties, ka klausītājs parādās, pirms vainojat QGIS. Ja ports jau tiek izmantots, pāradresācija neizdodas startēšanas laikā, nevis vaicājuma laikā.

Ievietojiet nosaukumu un ligzdu vienā pakalpojuma ierakstā

Pakalpojuma fails ļauj vienam un tam pašam savienojumam nest pārbaudes nosaukumu un citu ligzdas galamērķi. Saglabājiet ierakstu tur, kur libpq meklē pakalpojumus, vai novirziet PGSERVICEFILE uz to.

[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.crt

Šeit host saglabā identitāti, ko izmanto sertifikātu pārbaudēs, bet hostaddr sūta paketes uz pāradresēto loopback portu, un abi ir nepieciešami, lai šī kārtība darbotos. gssencmode=disable ir svarīgs būvējumos, kas citādi vispirms apspriestu GSSAPI šifrēšanu, jo šis ceļš ignorē tikko iestatītos TLS iestatījumus. Atsaucieties uz pakalpojumu pēc nosaukuma no QGIS PostgreSQL savienojuma dialoga un ievadiet paroli parastajā uzvednē, nevis koplietotā failā. Iepriekš minētie nosaukumi un ceļi ir aizvietotāji; nomainiet tos ar savām apstiprinātajām vērtībām.

Ko PostgreSQL vēl pārbauda pēc tuneļa

Serveris redz savienojumu no SSH resursdatora, šajā kārtībā loopback, un pēc kārtas salīdzina to ar resursdatorā balstītiem autentifikācijas noteikumiem. Jūsu datubāzes lomai joprojām ir jāautentificējas, un SSH pieteikšanās pati par sevi nedod datubāzes identitāti. Pārbaudiet, ko serveris uzskata, nevis ko klients pieņēma.

psql "service=gis-via-ssh" -c "select inet_server_addr(), current_user"

Aizveriet pāradresācijas sesiju, kad darbs ir pabeigts; lokālais ieraksts tad pārstāj darboties un nekas cits nemainās. Viens ceļš uz datubāzi nav VPN visam GIS klientam, un tieši attieksme pret to kā pret VPN ir iemesls, kāpēc nākamais savienojums tiek diagnosticēts nepareizi.

Saistītie raksti