VPNak ez du psql blokeatzen: zure bezeroak beste helmuga bat deitzen du
psql eta GUI bezero bat helmuga desberdinak dei ditzakete makina beretik. Konparatu host, socket, rol eta TLS VPNari errua bota aurretik.
Bi bezeroak ordenagailu berberean daude, tunel beretik igarotzen dira, eta horietako bakarra konektatzen da. Konparazio horrek frogatzat ematen du VPNak hautakorra dela, baina askoz ohikoagoa den azalpena da bi bezeroek helmuga desberdinak deitzen dituztela. GUI batek bere host, portu, rol eta TLS ezarpenak gordetzen ditu eta SSH aurrerapen bat isilik eraikitzen du behar duenean, eta psql-ek libpq-ren balio lehenetsiekin muntatzen du konexioa, zure shelleak jada ezarri ote duen. Lanean ari den konexioa erreproduzitzea GUI-ren ezarpenak irakurtzea da, ez tunela berriro instalatzea.
Mitoa: bezero batek funtzionatzeak bidea frogatzen du
GUI-a konektatzen bada, tunelak trafikoa eramaten du, eta hori da GUI-ak frogatzen duen gauza bakarra. Ez du ezer esaten psql-ek zein helbide ebazten duen, zein rolekin autentifikatzen den edo irekitzen duen socketak makinatik irteten duen. Bidea partekatua da; parametroak ez.
Aurrerapen lokal batek tartea handitzen du. GUI-a SSH bidez aurreratu duen portu batera konekta daiteke 127.0.0.1 helbidean, eta entzule hori GUI saioa irauten duen bitartean baino ez da existitzen. Aurrerapenik gabe localhost-era zuzendutako psql-ek ukatutako konexio bat jasotzen du, VPNarekin zerikusirik ez duena.
Irakurri GUI-ak benetan erabiltzen duen muturra
Ireki konexioaren propietateak eta kopiatu lau balio: host, portua, datu-basea eta rola. Ondoren bilatu tunelaren fitxa bat, SSH aurrerapen batek helbide pribatu bat portu lokal bihurtzen baitu eta psql-i esan beharrekoa aldatzen baitu.
| 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 |
Errenkada bakoitzak geruza desberdin batean egiten du huts, eta jasotzen duzun mezuak geruza horri izena ematen dio. Gordatutako profilaren izen atsegina psql-en itsasteak ez du goiko baliorik eramaten, eta zerbitzu-izen bat terminalak inoiz irakurriko ez duen fitxategi baten bidez ebazten da.
Zer heredatzen du libpq-k zure shelletik
psql libpq-ren gaineko bezero mehea da, eta libpq-k ingurunea irakurtzen du beste ezer irakurri aurretik. PGHOST, PGHOSTADDR, PGPORT, PGDATABASE, PGUSER, PGSERVICE eta PGSSLMODE bezalako aldagaiek konexioaren zati bana birzuzen dezakete. Heredatu egiten dira, ez dira idazten, beraz exekutatu duzun komandoan ez da horietako bat ere agertzen. Esportatutako PGSSLMODE batek ere alda dezake bezeroak onartzen duena komando lerroan hitz bat ere esan gabe.
Bi aldagai horietatik lehenengo susmoa merezi dute. PGHOSTADDR izenen ebazpena gainditzen duen helmuga numeriko bat ematen du, host izenak ziurtagiriaren identitatea oraindik gobernatzen duen bitartean, eta PGSERVICE zerbitzu-fitxategi batetik ateratzen ditu host, datu-basea eta TLS aukerak. Hau arazteko ingurune osoa botatzea ohitura txarra da, pasahitzak eta erlaziorik gabeko tokenak izan baititzake; aukeratu axola dizkizun aldagaiak horren ordez.
host eta hostaddr biak saihesteak Unix domeinuko socket bat hautatzen du, sareko helbide bat beharrean. Beraz, -h gabe psql deitzeak arrakasta izan dezake lokalean, edo socket errore batekin huts egin, GUI-ak erabiltzen duen ibilbidea inoiz ukitu gabe.
Bidali parametro berak eskuz
GUI-ren balioak eskuan dituzula, pasatu esplizituki eta saltatu gainidazketak gehi ditzakeen hasierako fitxategia. Beheko konexio-katea adibidezkoa da: ordeztu muturra, portua, datu-basea eta rola zure administratzaileak onartutako balioekin, eta mantendu jada funtzionatzen duen konfiantza-konfigurazioa.
psql -X "host=db.internal.example port=6432 dbname=orders user=report_ro sslmode=verify-full connect_timeout=5"Komando horretako hiru xehetasun nahita daude. -X-k psql-ren hasierako fitxategia desaktibatzen du, baina ez libpq-ren ingurunea edo zerbitzu-definizio bat. connect_timeout=5-k hutsune baterako ibilbide batek terminala minutuz zintzilik ez dezala eragozten du. sslmode=verify-full-k ziurtagiriaren eta host izenaren egiaztapenak piztuta mantentzen ditu, eta hori da hain zuzen jendeak TLS errore bat agertzean desaktibatzen duen zatia.
Onartutako muturra pooler baten atzean badago, 6432 portuak eta 5432 portuak datu berberetara irits daitezke zerbitzari-identitate desberdinen bidez, eta egiaztapenak huts egin dezake pooler-aren izenean eta ez datu-basearenean. Zuzendu izena konexio-katean, modua ahuldu beharrean.
Utzi errore-mezua hurrengo urratsa aukeratzen
Hutsegitearen testuak saiakerak zenbat aurreratu zuen esaten du, eta horrek tunelari buruzko edozein susmo gainditzen du. Ebazten ez den izen batek socket bat existitu baino lehen egiten du huts, denbora-muga batek ibilbideak edo suebakiak paketeak bota dituela esan nahi du, ukapenak zerbait erantzun eta ukatu egin zela, eta autentifikazio-erroreak sarea jada funtzionatzen ari zela.
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 --versionKonparatu \conninfo-ren irteera GUI-ren zuzeneko saioarekin: host bera, portu bera, rol bera, TLS egoera bera. Lau horiek bat egiten dutenean, VPNak ez du ezer gehiago azaltzeko. Bat egin arte, tunelaren aldaketa gehigarri bakoitza terminalak inoiz egin ez zuen konexio bati buruzko susmoa da.