Tunel SSH QGIS–PostGIS: ohranite ime strežnika za TLS
Posredovanje SSH da QGIS lokalna vrata, a podatkovna zbirka za TLS še vedno potrebuje svoje pravo ime. Uporabite storitev libpq s hostaddr in poslušalcem loopback.
Tunel se dvigne, QGIS se poveže in prijava umre z napako potrdila, ki navaja 127.0.0.1 namesto gostitelja podatkovne zbirke. Naslednja vabljiva poteza je popustiti sslmode, kar utiša preverjanje in zavrže jamstvo identitete, ki ste ga pravzaprav želeli. Resnična težava je, da se lokalna vrata in ime strežnika shranjujeta v istem polju. Vnos storitve libpq ju loči, zato gnezdo gre na posredovana vrata, medtem ko TLS še vedno preverja ime, natisnjeno na potrdilu.
S čim misli odjemalec, da se povezuje
Pri sslmode=verify-full libpq primerja potrdilo, ki ga predstavi strežnik, z zahtevanim imenom gostitelja. Ko je to ime naslov loopback, primerjava ne uspe, čeprav je potrdilo veljavno za pravega gostitelja podatkovne zbirke. Posredovanje SSH spremeni, katero gnezdo prenaša bajte, ne identitete, ki naj bi jo odjemalec pričakoval. Ko se ti dve zamisli ločita, napaka ne izgleda več kot okvara TLS.
Posredovanje ni pooblastilo. PostgreSQL še vedno uporablja svoja pravila za povezavo, ki jo vzpostavi strežnik SSH, zato pred kakršno koli spremembo ohranite transportni sloj in sloj podatkovne zbirke ločena.
Vežite posredovanje samo na loopback
Poslušalec naj obstaja na stroju QGIS in nikjer drugje. Izrecna navedba 127.0.0.1 ga drži stran od drugih vmesnikov, medtem ko lahko izpuščen naslov vezave vrata izpostavi glede na nastavitve prehoda odjemalca SSH.
ssh -N -L 127.0.0.1:15432:127.0.0.1:5432 [email protected]Cilj za drugim dvopičjem se razreši na strani strežnika SSH, zato ta primer predpostavlja, da je PostgreSQL na istem gostitelju kot sshd; zbirka na drugem stroju potrebuje ta naslov in njegova dovoljenja. Zaženite sejo z -N, da se ne odpre nobena lupina, pustite preverjanje gostiteljskega ključa pri miru in pred obtoževanjem QGIS potrdite, da se poslušalec pojavi. Če so vrata že v uporabi, posredovanje ne uspe ob zagonu in ne ob poizvedbi.
Postavite ime in gnezdo v en vnos storitve
Datoteka storitve omogoča isti povezavi, da nosi ime za preverjanje in drug cilj gnezda. Shranite vnos tam, kjer libpq išče storitve, ali usmerite PGSERVICEFILE nanj.
[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.crtTu host ohrani identiteto, uporabljeno za preverjanja potrdila, medtem ko hostaddr pošilja pakete na posredovana vrata loopback, in oboje je potrebno, da ta ureditev deluje. gssencmode=disable je pomembno pri gradnjah, ki bi sicer najprej izpogajale šifriranje GSSAPI, ker ta pot prezre pravkar nastavljene možnosti TLS. Sklicujte se na storitev po imenu iz pogovornega okna za povezavo PostgreSQL v QGIS in geslo vnesite prek običajnega poziva, ne v skupni datoteki. Zgornja imena in poti so nadomestni znaki; zamenjajte jih s svojimi odobrenimi vrednostmi.
Kaj PostgreSQL po tunelu še preverja
Strežnik vidi povezavo z gostitelja SSH, v tej ureditvi loopback, in jo po vrsti primerja s pravili preverjanja pristnosti na podlagi gostitelja. Vaša vloga v zbirki se mora še vedno preveriti, prijava SSH pa sama po sebi ne podeli nobene identitete v zbirki. Preverite, kaj meni strežnik, ne kaj je predpostavil odjemalec.
psql "service=gis-via-ssh" -c "select inet_server_addr(), current_user"Zaprite sejo posredovanja, ko je delo končano; lokalni vnos potem preneha delovati in nič drugega se ne spremeni. Ena pot do zbirke ni VPN za celotnega odjemalca GIS, in ravno obravnavanje kot VPN vodi v napačno diagnozo naslednje povezave.