VPN nuk e bllokon psql: klienti juaj shkon diku tjetër
psql dhe një klient GUI mund të shkojnë drejt pikave fundore të ndryshme nga e njëjta makinë. Krahasoni host, socket, rol dhe TLS përpara se të fajësoni VPN-në.
Të dy klientët janë në të njëjtin laptop, kalojnë nëpër të njëjtin tunel dhe vetëm njëri prej tyre lidhet. Ky krahasim duket si provë që VPN-ja është selektive, ndërsa shpjegimi shumë më i zakonshëm është se dy klientët shkojnë drejt destinacioneve të ndryshme. Një GUI mban hostin, portin, rolin dhe cilësimet e veta TLS dhe ndërton në heshtje një ridrejtim SSH kur i nevojitet, ndërsa psql mbledh një lidhje nga vlerat e paracaktuara të libpq që shell-i juaj mund t'i ketë vendosur tashmë. Riprodhimi i lidhjes që funksionon është çështje leximi i cilësimeve të GUI-së, jo riinstalimi i tunelit.
Miti: një klient që funksionon vërteton rrugën
Nëse GUI lidhet, tuneli bart trafikun, dhe kjo është e vetmja gjë që GUI vërteton. Nuk thotë asgjë për atë se cilën adresë zgjidh psql, me çfarë roli vërtetohet ose nëse socket-i që hap largohet ndonjëherë nga makina. Rruga është e përbashkët; parametrat nuk janë.
Një ridrejtim lokal e zgjeron hendekun. GUI mund të lidhet me 127.0.0.1 në një port që e ka ridrejtuar përmes SSH, dhe ai dëgjues ekziston vetëm sa zgjat sesioni i GUI-së. psql i drejtuar nga localhost pa ridrejtimin merr një lidhje të refuzuar që nuk ka asnjë lidhje me VPN-në.
Lexoni pikën fundore që GUI përdor në të vërtetë
Hapni vetitë e lidhjes dhe kopjoni katër vlera: host, port, bazë të dhënash dhe rol. Më pas kërkoni një skedë tuneli, sepse një ridrejtim SSH e kthen një adresë private në port lokal dhe ndryshon atë që duhet t'i thuhet psql.
| 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 |
Çdo rresht dështon në një shtresë të ndryshme, dhe mesazhi që merrni e emërton atë shtresë. Ngjitja e emrit miqësor të profilit të ruajtur në psql nuk bart asnjë nga vlerat më sipër, dhe një emër shërbimi zgjidhet përmes një skedari që terminali ndoshta nuk do ta lexojë kurrë.
Çfarë trashëgon libpq nga shell-i juaj
psql është një klient i hollë mbi libpq, dhe libpq lexon mjedisin përpara se të lexojë çdo gjë tjetër. Ndryshore si PGHOST, PGHOSTADDR, PGPORT, PGDATABASE, PGUSER, PGSERVICE dhe PGSSLMODE mund të ridrejtojnë secila një pjesë të lidhjes. Trashëgohen në vend që të shkruhen, prandaj asgjë në komandën që ekzekutuat nuk i tregon ato. Një PGSSLMODE e eksportuar gjithashtu mund të ndryshojë atë që klienti pranon pa një fjalë në rreshtin e komandës.
Dy nga këto ndryshore meritojnë dyshimin të parët. PGHOSTADDR ofron një destinacion numerik që anashkalon zgjidhjen e emrave, ndërsa emri i hostit ende përcakton identitetin e certifikatës, dhe PGSERVICE nxjerr hostin, bazën e të dhënave dhe zgjedhjet TLS nga një skedar shërbimi. Hedhja e të gjithë mjedisit për korrigjim është zakon i keq, pasi mund të përmbajë fjalëkalime dhe shenja të palidhura; në vend të kësaj zgjidhni ndryshoret që ju interesojnë.
Heqja e host dhe hostaddr së bashku zgjedh një socket domeni Unix në vend të një adrese rrjeti. Prandaj një thirrje psql pa -h mund të ketë sukses lokalisht, ose të dështojë me një gabim socket-i, pa prekur kurrë rrugën që përdor GUI.
Dërgoni të njëjtat parametra me dorë
Me vlerat e GUI-së në dorë, kalojini ato në mënyrë eksplicite dhe kaloni skedarin e nisjes që mund të shtojë zëvendësime. Vargu i lidhjes më poshtë është ilustrues: zëvendësoni pikën fundore, portin, bazën e të dhënave dhe rolin me vlerat e miratuara nga administratori juaj dhe mbani konfigurimin e besimit që funksionon tashmë.
psql -X "host=db.internal.example port=6432 dbname=orders user=report_ro sslmode=verify-full connect_timeout=5"Tre detaje në atë komandë janë të qëllimshme. -X shtyp skedarin e nisjes së psql, edhe pse nuk shtyp mjedisin e libpq ose një përkufizim shërbimi. connect_timeout=5 pengon një rrugë bosh të varë terminalin për minuta. sslmode=verify-full mban të aktivizuara kontrollet e certifikatës dhe të emrit të hostit, që është pikërisht pjesa që njerëzit çaktivizojnë kur shfaqet një gabim TLS.
Nëse pika fundore e miratuar qëndron pas një pooler, porti 6432 dhe porti 5432 mund të arrijnë të njëjtat të dhëna përmes identiteteve të ndryshme serveri, dhe verifikimi mund të dështojë në emrin e pooler-it në vend të bazës së të dhënave. Korrigjoni emrin në vargun e lidhjes në vend që të dobësoni modalitetin.
Lëreni mesazhin e gabimit të zgjedhë hapin tjetër
Teksti i dështimit thotë sa larg shkoi përpjekja, dhe kjo mund çdo hamendje për tunelin. Një emër që nuk zgjidhet dështon përpara se të ekzistojë një socket, një skadim kohe do të thotë që rruga ose një firewall i hodhi paketat, një refuzim do të thotë që diçka u përgjigj dhe refuzoi, dhe një gabim vërtetimi do të thotë që rrjeti funksiononte tashmë.
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 --versionKrahasoni daljen e \conninfo me sesionin e gjallë të GUI-së: i njëjti host, i njëjti port, i njëjti rol, i njëjti gjendje TLS. Kur këto katër përputhen, VPN-së nuk i mbetet asgjë për të shpjeguar. Derisa të përputhen, çdo ndryshim shtesë i tunelit është hamendje për një lidhje që terminali nuk e ka bërë kurrë.