Parehong nasa isang laptop ang dalawang kliyente, dumadaan sa isang tunnel, at isa lang sa kanila ang kumokonekta. Ang paghahambing na iyon ay parang patunay na pili ang VPN, samantalang ang mas karaniwang paliwanag ay iba ang destinasyong tinatawagan ng dalawang kliyente. Ang isang GUI ay nag-iingat ng sarili nitong host, port, papel at mga setting ng TLS at tahimik na gumagawa ng SSH forward kapag kailangan nito, habang ang psql ay bumubuo ng koneksyon mula sa mga default ng libpq na maaaring naiset na ng iyong shell. Ang muling paggawa ng gumaganang koneksyon ay usapin ng pagbasa ng mga setting ng GUI, hindi ng muling pag-install ng tunnel.

Ang mito: isang gumaganang kliyente ang nagpapatunay ng landas

Kung kumokonekta ang GUI, nagdadala ng trapiko ang tunnel, at iyon lang ang pinatutunayan ng GUI. Wala itong sinasabi tungkol sa kung aling address ang niresolba ng psql, kung anong papel ang ginagamit nito sa pagpapatunay, o kung umaalis man ang socket na binubuksan nito sa makina. Ang landas ay ibinabahagi; ang mga parameter ay hindi.

Pinapalawak ng lokal na forward ang agwat. Maaaring kumonekta ang GUI sa 127.0.0.1 sa isang port na inilipat nito sa SSH, at ang listener na iyon ay umiiral lamang habang tumatagal ang sesyon ng GUI. Ang psql na nakaturo sa localhost nang walang forward ay nakakakuha ng tinanggihang koneksyon na walang kinalaman sa VPN.

Basahin ang dulo na aktwal na ginagamit ng GUI

Buksan ang mga katangian ng koneksyon at kopyahin ang apat na halaga: host, port, database at papel. Pagkatapos ay hanapin ang tab ng tunnel, dahil ginagawang lokal na port ng SSH forward ang isang pribadong address at binabago nito kung ano ang dapat sabihin sa psql.

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

Bawat hilera ay nabibigo sa ibang antas, at pinapangalanan ng mensaheng natatanggap mo ang antas na iyon. Ang pag-paste ng palakaibigang pangalan ng naka-save na profile sa psql ay walang dinadalang alinman sa mga halaga sa itaas, at ang pangalan ng serbisyo ay niresolba sa pamamagitan ng file na maaaring hindi kailanman basahin ng terminal.

Ano ang minamana ng libpq mula sa iyong shell

Ang psql ay manipis na kliyente sa ibabaw ng libpq, at binabasa ng libpq ang kapaligiran bago basahin ang anumang iba pa. Ang mga variable tulad ng PGHOST, PGHOSTADDR, PGPORT, PGDATABASE, PGUSER, PGSERVICE at PGSSLMODE ay maaaring bawat isang mag-redirect ng bahagi ng koneksyon. Ang mga ito ay minamana sa halip na itinatype, kaya wala sa command na pinatakbo mo ang nagpapakita sa kanila. Ang naka-export na PGSSLMODE ay maaari ring magbago ng tinatanggap ng kliyente nang walang isang salita sa command line.

Dalawa sa mga variable na iyon ang karapat-dapat paghinalaan muna. Ang PGHOSTADDR ay nagbibigay ng numerikong destinasyon na lumalampas sa resolusyon ng pangalan habang ang pangalan ng host ay namamahala pa rin sa pagkakakilanlan ng sertipiko, at ang PGSERVICE ay humihila ng host, database at mga pagpipilian sa TLS mula sa file ng serbisyo. Ang pagtatapon ng buong kapaligiran para i-debug ito ay masamang ugali, dahil maaaring naglalaman ito ng mga password at walang kaugnayang token; piliin na lang ang mga variable na mahalaga sa iyo.

Ang pag-alis ng parehong host at hostaddr ay pumipili ng socket ng dominyong Unix sa halip na address ng network. Kaya ang tawag sa psql na walang -h ay maaaring magtagumpay nang lokal, o mabigo sa error ng socket, nang hindi man lang hinihipo ang rutang ginagamit ng GUI.

Ipadala ang parehong mga parameter nang manwal

Hawak mo ang mga halaga ng GUI, ipasa ang mga ito nang tahasan at laktawan ang startup file na maaaring magdagdag ng mga override. Ang connection string sa ibaba ay halimbawa: palitan ang dulo, port, database at papel ng mga halagang inaprubahan ng iyong administrador, at panatilihin ang configuration ng tiwala na gumagana na.

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

Tatlong detalye sa command na iyon ay sinasadya. Sinusupil ng -X ang startup file ng psql, kahit na hindi nito sinusupil ang kapaligiran ng libpq o isang depinisyon ng serbisyo. Pinipigilan ng connect_timeout=5 ang isang rutang walang labasan na ibitin ang terminal nang ilang minuto. Pinapanatili ng sslmode=verify-full na bukas ang mga pagsusuri ng sertipiko at pangalan ng host, at iyon mismo ang bahaging pinapatay ng mga tao kapag lumitaw ang error ng TLS.

Kung ang inaprubahang dulo ay nasa likod ng pooler, ang port 6432 at port 5432 ay maaaring makarating sa parehong data sa pamamagitan ng magkaibang pagkakakilanlan ng server, at ang pagpapatunay ay maaaring mabigo sa pangalan ng pooler sa halip na ng database. Itama ang pangalan sa connection string sa halip na pahinain ang mode.

Hayaang piliin ng mensahe ng error ang susunod na hakbang

Sinasabi ng teksto ng pagkabigo kung gaano kalayo ang narating ng pagtatangka, at mas mahusay iyon kaysa sa anumang haka-haka tungkol sa tunnel. Ang pangalang hindi maresolba ay nabibigo bago pa man umiral ang socket, ang pagpalya ng oras ay nangangahulugang ibinagsak ng ruta o firewall ang mga packet, ang pagtanggi ay nangangahulugang may sumagot at tumanggi, at ang error sa pagpapatunay ay nangangahulugang gumagana na ang network.

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

Ihambing ang output ng \conninfo sa live na sesyon ng GUI: parehong host, parehong port, parehong papel, parehong estado ng TLS. Kapag nagtugma ang apat na iyon, wala nang iba pang ipapaliwanag ang VPN. Hangga't hindi sila nagtutugma, ang bawat karagdagang pagbabago sa tunnel ay haka-haka tungkol sa koneksyong hindi kailanman ginawa ng terminal.

Kaugnay na mga artikulo