Déi zwou Clients sinn um selwechten Laptop, ginn duerch de selwechten Tunnel, an nëmmen een vun hinnen verbënnt sech. Dëse Verglach fillt sech wéi de Beweis, datt d'VPN selektiv ass, wärend déi vill méi heefeg Erklärung ass, datt déi zwou Clients verschidden Destinatiounen uwielen. Eng GUI hält hire eigenen Host, Port, Roll an TLS-Astellungen a baut roueg eng SSH-Weiderleitung, wann se eng braucht, wärend psql eng Verbindung aus libpq-Standardwäerter zesummesetzt, déi deng Shell vläicht schonn agestallt huet. D'funktionnéierend Verbindung nozebauen ass eng Fro vun den Astellunge vun der GUI ze liesen, net vum Tunnel nei ze installéieren.

De Mythos: ee funktionnéierende Client beweist de Wee

Wann d'GUI sech verbënnt, dréit den Tunnel Traffic, an dat ass dat eenzegt, wat d'GUI beweist. Et seet näischt doriwwer, wéi eng Adress psql opléist, mat wéi enger Roll et sech authentifizéiert, oder ob de Socket, deen et opmécht, je d'Maschinn verléisst. De Wee ass gedeelt; d'Parameteren net.

Eng lokal Weiderleitung vergréissert den Ënnerscheed. D'GUI kann sech mat 127.0.0.1 op engem Port verbannen, deen se iwwer SSH weidergeleet huet, an dee Lauschterer existéiert nëmme wärend der GUI-Sessioun. psql, ouni d'Weiderleitung op localhost geriicht, kritt eng ofgelehnt Verbindung, déi näischt mam VPN ze dinn huet.

Lies den Endpunkt, deen d'GUI tatsächlech benotzt

Maach d'Eegeschaften vun der Verbindung op a kopéier véier Wäerter: Host, Port, Datebank a Roll. Da siche no engem Tunnel-Tab, well eng SSH-Weiderleitung eng privat Adress an e lokale Port ëmwandelt an ännert, wat dem psql gesot muss ginn.

SettingWhat the GUI holdsWhat psql uses when the value is absent
DestinationA saved hostname, sometimes behind a forwardA local Unix socket, not the remote endpoint
PortThe direct port or a forwarded local port5432, or the port from a service file
Role and databaseStored per connection profileYour operating-system user name
TLS identityIts own CA bundle and verification modeWhatever PGSSLMODE or the service file says
Startup filesNot read at allRead unless -X is passed

All Zeil versot op enger anerer Schicht, an d'Message, déi s du kréis, nennt déi Schicht. Den frëndlechen Numm vum gespaarte Profil an psql ze paste bréngt keen vun de Wäerter uewen, an en Déngschtnumm gëtt iwwer eng Datei opgeléist, déi den Terminal vläicht ni liest.

Wat libpq vun denger Shell ierft

psql ass en dënnen Client iwwer libpq, a libpq liest d'Ëmwelt ier et eppes anescht liest. Variabelen wéi PGHOST, PGHOSTADDR, PGPORT, PGDATABASE, PGUSER, PGSERVICE an PGSSLMODE kënnen all een Deel vun der Verbindung ëmleeden. Si ginn geierft amplaz getippt, dofir weist näischt an dem Kommando, deen s du ausgefouert hues, se. Eng exportéiert PGSSLMODE kann och änneren, wat de Client akzeptéiert, ouni e Wuert op der Kommandozeil.

Zwee vun dëse Variabelen verdéngen d'éischt Verdacht. PGHOSTADDR liwwert en numerescht Zil, dat d'Nimmopfélsung iwwerschreift, wärend den Hostnumm nach ëmmer d'Identitéit vum Zertifikat bestëmmt, an PGSERVICE zitt Host, Datebank an TLS-Choixen aus enger Déngschtdatei. D'ganz Ëmwelt ze dumpen, fir dat ze debuggen, ass eng schlecht Gewunnecht, well se Passwierder an onverbonnen Tokens kaent enthalen; wiel amplaz d'Variabelen, déi dir wichteg sinn.

Souwuel host wéi hostaddr ewech loossen, wielt e Unix-Domän-Socket amplaz enger Netzwierkadress. En psql-Aufruff ouni -h kann dofir lokal geléngen oder mat engem Socket-Fehler scheltern, ouni je de Wee ze beréieren, deen d'GUI benotzt.

Schéck déi selwecht Parameteren mat der Hand

Mat de Wäerter vun der GUI an der Hand, gëff se explizit weider a spréng d'Startdatei iwwer, déi Iwwerschreiwungen derbäisetze kéint. D'Verbindungszeil hei drënner ass illustrativ: ersetz den Endpunkt, de Port, d'Datebank an d'Roll duerch d'Wäerter, déi däin Administrateur guttgeheescht huet, a behal d'Vertrauenskonfiguratioun, déi schonn funktionnéiert.

psql -X "host=db.internal.example port=6432 dbname=orders user=report_ro sslmode=verify-full connect_timeout=5"

Dräi Detailer an deem Kommando sinn absichtlech. -X ënnerdréckt d'Startdatei vum psql, awer ënnerdréckt net d'Ëmwelt vu libpq oder eng Déngschtdefinitioun. connect_timeout=5 verhënnert, datt e Wee an d'Leerden den Terminal Minutte laang hänke léisst. sslmode=verify-full hält d'Zertifikats- an den Hostnumm-Kontrollen un, wat genee deen Deel ass, deen d'Leit ausschalten, wann en TLS-Fehler erschéngt.

Wann den ugehollenen Endpunkt hannert engem Pooler sëtzt, kënnen de Port 6432 an de Port 5432 déi selwecht Donnéeën iwwer verschidden Serveridentitéiten erreechen, an d'Verifikatioun kann um Numm vum Pooler amplaz um Numm vun der Datebank scheltern. Korrigéier den Numm an der Verbindungszeil amplaz de Modus ze schwächen.

Looss d'Fehlermeldung den nächste Schrëtt wielen

Den Text vum Feeler seet, wéi wäit den Versuch komm ass, an dat schléit all Vermutung iwwer den Tunnel. En Numm, deen sech net opléist, versot ier et e Socket gëtt, en Timeout bedeit, datt de Wee oder eng Firewall Pakete verworf huet, eng Oflehnung bedeit, datt eppes geäntwert an ofgelehnt huet, an en Authentifikatiounsfehler bedeit, datt d'Netzwierk schonn funktionnéiert huet.

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

Vergläich d'Ausgab vun \conninfo mat der lieweger Sessioun vun der GUI: selwechten Host, selwechte Port, selwecht Roll, selwechte TLS-Zoustand. Wann déi véier iwwerenee stëmmen, huet d'VPN näischt méi ze erklären. Bis se iwwerenee stëmmen, ass all zousätzlech Tunnelännerung eng Vermutung iwwer eng Verbindung, déi den Terminal ni gemaach huet.

Ähnlech Artikelen