De VPN blokkearret psql net: dyn klant kiest in oar bestimming
psql en in GUI-klant kinne fan ien masine ferskate einpunten kieze. Fergelykje host, stekker, rol en TLS foardat jo de VPN de skuld jouwe.
Beide klanten steane op deselde laptop, geane troch deselde tunnel, en mar ien fan harren makket ferbining. Dy ferliking fielt as bewiis dat de VPN selektyf is, wylst de folle gewoanere ferklearring is dat de beide klanten ferskate bestimmings kieze. In GUI hâldt syn eigen host, poart, rol en TLS-ynstellingen by en bout stil in SSH-foarútstjoering as er ien nedich hat, wylst psql in ferbining gearstaltet út libpq-standertwearden dy't dyn shell miskien al ynsteld hat. It wurkjende ferbân neibrengen is in kwestje fan de ynstellingen fan de GUI lêze, net fan de tunnel opnij ynstallearje.
De myte: ien wurkjende klant bewiist it paad
As de GUI ferbining makket, ferfiert de tunnel ferkear, en dat is it iennige dat de GUI bewiist. It seit neat oer hokker adres psql oplost, mei hokker rol it him autentisearret, of it stopcontact dat it iepenet ea de masine ferlit. It paad is mienskiplik; de parameters net.
In lokale foarútstjoering fergruttet it gat. De GUI kin ferbining meitsje mei 127.0.0.1 op in poart dy't er oer SSH foarútstjoerd hat, en dy lústerer bestiet allinne salang't de GUI-sesje duorret. psql rjochte op localhost sûnder de foarútstjoering krijt in wegere ferbining dy't neat mei de VPN te meitsjen hat.
Lês it einpunt dat de GUI echt brûkt
Iepenje de eigenskippen fan de ferbining en kopiearje fjouwer wearden: host, poart, databank en rol. Sykje dan nei in tunnel-tab, want in SSH-foarútstjoering feroaret in privee-adres yn in lokale poart en feroaret wat tsjin psql sein wurde moat.
| Setting | What the GUI holds | What psql uses when the value is absent |
|---|---|---|
| Destination | A saved hostname, sometimes behind a forward | A local Unix socket, not the remote endpoint |
| Port | The direct port or a forwarded local port | 5432, or the port from a service file |
| Role and database | Stored per connection profile | Your operating-system user name |
| TLS identity | Its own CA bundle and verification mode | Whatever PGSSLMODE or the service file says |
| Startup files | Not read at all | Read unless -X is passed |
Elke rige mislearret yn in oare laach, en it berjocht dat jo krije neamt dy laach. It freonlike namme fan it bewarre profyl yn psql plakke draacht gjin fan de wearden hjirboppe, en in tsjinstnamme wurdt oplost fia in bestân dat de terminal miskien nea lêst.
Wat libpq fan dyn shell erft
psql is in tinne klant oer libpq, en libpq lêst it omjouwing foardat er wat oars lêst. Fariabelen lykas PGHOST, PGHOSTADDR, PGPORT, PGDATABASE, PGUSER, PGSERVICE en PGSSLMODE kinne elk in part fan de ferbining omliede. Se wurde erfd yn plak fan typt, dus neat yn it kommando dat jo útfierd hawwe lit se sjen. In eksporteare PGSSLMODE kin ek feroarje wat de klant akseptearret sûnder in wurd op de kommandorigel.
Twa fan dy fariabelen fertsjinje earst efterdocht. PGHOSTADDR leveret in numerike bestimming dy't namme-oplossing oerhearsket wylst de hostnamme noch altyd de identiteit fan it sertifikaat bepaalt, en PGSERVICE lûkt host, databank en TLS-keuzes út in tsjinstbestân. It hiele omjouwing dumpen om dit te debuggen is in minne gewoante, want it kin wachtwurden en net-relatearre tokens befetsje; kies ynstee de fariabelen dy't jo ynteressearje.
It weilitten fan sawol host as hostaddr kiest in Unix-domeinstekker yn plak fan in netwurkadres. In psql-oproep sûnder -h kin dêrom lokaal slagje, of mislearje mei in stekkerflater, sûnder ea it paad oan te reitsjen dat de GUI brûkt.
Stjoer deselde parameters mei de hân
Mei de wearden fan de GUI by de hân, jou se eksplisyt troch en sloech it startbestân oer dat oerskriuwingen tafoegje kin. De ferbiningsrige hjirûnder is yllustratyf: ferfang it einpunt, de poart, de databank en de rol troch de wearden dy't jo administrateur goedkard hat, en hâld de fertrouwenskonfiguraasje dy't al wurket.
psql -X "host=db.internal.example port=6432 dbname=orders user=report_ro sslmode=verify-full connect_timeout=5"Trije details yn dat kommando binne bewust. -X ûnderdrukt it startbestân fan psql, hoewol it it omjouwing fan libpq of in tsjinstdefinysje net ûnderdrukt. connect_timeout=5 hâldt in swart gat paad tsjin om de terminal minuten lang hingje te litten. sslmode=verify-full hâldt sertifikaat- en hostnamme-kontrôles oan, dat is krekt it part dat minsken útsette as in TLS-flater ferskynt.
As it goedkarde einpunt efter in pooler sit, kinne poart 6432 en poart 5432 deselde gegevens berikke fia ferskate tsjinneridentiteiten, en ferifikaasje kin mislearje op de namme fan de pooler yn plak fan dy fan de databank. Korrigearje de namme yn de ferbiningsrige yn plak fan de modus te ferswakjen.
Lit it flaterberjocht de folgjende stap kieze
De tekst fan de mislearring seit hoe fier't de poging kaam, en dat ferslacht elk gis oer de tunnel. In namme dy't net oplost mislearret foardat in stekker bestiet, in time-out betsjut dat it paad of in firewall pakketten falle litten hat, in wegering betsjut dat wat antwurde en wegere, en in autentikaasjeflater betsjut dat it netwurk al wurke.
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 --versionFergelykje de \conninfo-útkomst mei de libbene sesje fan de GUI: deselde host, deselde poart, deselde rol, deselde TLS-steat. As dy fjouwer oerienkomme, hat de VPN neat mear te ferklearjen. Oant se oerienkomme is elke ekstra tunnelferoaring in gis oer in ferbining dy't de terminal nea makke hat.