QGIS PostGIS SSH-Tunnel: behält den Servernumm fir TLS
Eng SSH-Weiderleedung gëtt QGIS e lokale Port, awer d’Datebank brauch fir TLS ëmmer nach hiren echte Numm. Benotzt eng libpq-Service mat hostaddr an engem Loopback-Lauschterer.
Den Tunnel kënnt erop, QGIS verbënnt sech, an d’Umeldung stierft mat engem Zertifikatsfehler, deen 127.0.0.1 amplaz vum Datebankhost nennt. Den nächsten attraktive Schrëtt ass, sslmode ze lockeren, wat d’Kontroll stëll mécht an déi Identitéitsgarantie ewechgeheit, déi dir iwwerhaapt wollt. D’tatsächlech Probleem ass, datt de lokale Port an den Numm vum Server am selwechte Feld gespäichert ginn. En libpq-Service-Antrag trennt se, sou datt de Socket op de weidergeleet Port geet, wärend TLS nach ëmmer den Numm um Zertifikat iwwerpréift.
Op wat de Client mengt sech ze verbannen
Ënner sslmode=verify-full vergläicht libpq d’Zertifikat, dee vum Server presentéiert gëtt, mam ugefrote Hostnumm. Wann deen Numm eng Loopback-Adress ass, schléit de Verglach fehl, och wann d’Zertifikat fir den echte Datebankhost gëlteg ass. D’SSH-Weiderleedung ännert, wéi en Socket d’Bäiten dréit, net d’Identitéit, déi de Client sollt erwaarden. Soubal déi zwou Iddien getrennt sinn, gesäit de Fehler net méi wéi en TLS-Defekt aus.
Eng Weiderleedung ass och keng Autorisatioun. PostgreSQL wend seng eege Reegele weider op d’Verbindung un, déi den SSH-Server opbaut, also haalt d’Transportschicht an d’Datebankschicht getrennt, ier dir eppes ännert.
Bind d’Weiderleedung nëmmen un Loopback
De Lauschterer soll op der QGIS-Maschinn existéieren an néierens soss. 127.0.0.1 explizit ze nennen hält en vun aneren Interface fort, wärend eng weggeloosse Bind-Adress de Port ka baussen aussetzen, ofhängeg vun de Gateway-Astellungen vum SSH-Client.
ssh -N -L 127.0.0.1:15432:127.0.0.1:5432 [email protected]D’Destinatioun no der zweeter Doppelpunkt gëtt vun der Säit vum SSH-Server opgeléist, dofir unhuelen dëst Beispill, datt PostgreSQL um selwechten Host wéi sshd ass; eng Datebank op enger anerer Maschinn brauch déi Adress an hir Berechtegungen. Start d’Sessioun mat -N, sou datt keng Shell opgeet, loosst d’Hostschlëssel-Iwwerpréifung an Rou a bestätegt, datt de Lauschterer erschéngt, ier dir QGIS beschëllegt. Wann de Port schonn a Gebrauch ass, schléit d’Weiderleedung beim Start fehl an net bei der Ufro.
Setzt den Numm an de Socket an een eenzegen Service-Antrag
Eng Service-Datei erlaabt der selwechter Verbindung, en Iwwerpréifungsnumm an en anere Socket-Zil ze droen. Späichert den Antrag do, wou libpq no Servicen sicht, oder richt PGSERVICEFILE drop.
[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.crtHei behält host d’Identitéit, déi fir Zertifikatskontrollen benotzt gëtt, wärend hostaddr d’Paketen op de weidergeleet Loopback-Port schéckt, a béides ass noutwenneg, datt dës Anuerdnung funktionnéiert. gssencmode=disable ass wichteg bei Builden, déi soss fir d’éischt GSSAPI-Verschlësselung aushandele géifen, well dee Wee déi just gesat TLS-Astellungen ignoréiert. Referenzéiert de Service mam Numm aus dem PostgreSQL-Verbindungsdialog vu QGIS a gitt d’Passwuert iwwer den normale Prompt, net bannent enger gedeelter Datei. D’Nimm an d’Weeër uewen sinn Plazhalter; ersetzt se duerch Är eegen approuvéiert Wäerter.
Wat PostgreSQL nach no dem Tunnel kontrolléiert
De Server gesäit eng Verbindung vum SSH-Host, an dëser Anuerdnung Loopback, a gläicht se an der Rei mat de hostbaséierte Authentifikatiounsregelen of. Är Datebankroll muss sech nach ëmmer authentifizéieren, an d’SSH-Umeldung gëtt vu sech aus keng Datebank-Identitéit. Iwwerpréift, wat de Server mengt, an net, wat de Client ugeholl huet.
psql "service=gis-via-ssh" -c "select inet_server_addr(), current_user"Maacht d’Weiderleedungssessioun zou, wann d’Aarbecht fäerdeg ass; den lokalen Antrag funktionnéiert dann net méi an soss ännert sech näischt. Een Datebankwee ass keen VPN fir de ganzen GIS-Client, an en als esou ze behandelen ass de Grond, firwat déi nächst Verbindung falsch diagnostizéiert gëtt.