Wateja wote wawili wako kwenye kompyuta mpakato moja, wanapitia handaki moja, na ni mmoja tu anayeunganisha. Ulinganisho huo unaonekana kama ushahidi kwamba VPN inachagua, ilhali maelezo ya kawaida zaidi ni kwamba wateja hao wawili wanapiga simu maeneo tofauti. GUI huhifadhi jina lake la mwenyeji, bandari, jukumu na mipangilio yake ya TLS na hujenga kwa utulivu uelekezaji wa SSH inapohitaji, wakati psql inakusanya muunganisho kutoka kwa chaguo-msingi za libpq ambazo ganda lako huenda limekwisha ziweka. Kuzalisha upya muunganisho unaofanya kazi ni suala la kusoma mipangilio ya GUI, si la kusakinisha handaki upya.

Hadithi: mteja mmoja anayefanya kazi huthibitisha njia

Iwapo GUI inaunganisha, handaki hubeba trafiki, na hilo ndilo pekee ambalo GUI huthibitisha. Haisemi chochote kuhusu anwani gani psql inatatua, kwa jukumu gani inathibitisha, au kama soketi inayoifungua huwa inaondoka kwenye mashine. Njia inashirikiwa; vigezo hazishirikiwi.

Uelekezaji wa ndani hupanua pengo. GUI inaweza kuunganisha na 127.0.0.1 kwenye bandari iliyoielekeza kupitia SSH, na msikilizaji huyo hupatikana tu muda wote wa kikao cha GUI. psql inayoelekezwa localhost bila uelekezaji hupata muunganisho uliokataliwa ambao hauna uhusiano wowote na VPN.

Soma mwisho ambao GUI inautumia kwa kweli

Fungua sifa za muunganisho na unakili thamani nne: mwenyeji, bandari, hifadhidata na jukumu. Kisha tafuta kichupo cha handaki, kwa sababu uelekezaji wa SSH hubadilisha anwani ya faragha kuwa bandari ya ndani na hubadilisha kile kinachopaswa kuambiwa 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

Kila mstari hushindwa katika tabaka tofauti, na ujumbe unaoupata hutaja tabaka hilo. Kubandika jina la kirafiki la wasifu uliohifadhiwa kwenye psql hakubeba thamani yoyote iliyo juu, na jina la huduma hutatuliwa kupitia faili ambalo terminal huenda lisilisome kamwe.

Kile libpq inarithi kutoka kwa ganda lako

psql ni mteja mwembamba juu ya libpq, na libpq husoma mazingira kabla ya kusoma kitu kingine chochote. Vigezo kama PGHOST, PGHOSTADDR, PGPORT, PGDATABASE, PGUSER, PGSERVICE na PGSSLMODE vinaweza kila kimoja kuelekeza upya sehemu ya muunganisho. Vinarithiwa badala ya kuandikwa, kwa hiyo hakuna kitu katika amri uliyoendesha kinavionyesha. PGSSLMODE iliyohamishwa nje inaweza pia kubadilisha kile mteja anachokubali bila neno kwenye mstari wa amri.

Mbili za vigezo hivyo zinastahili shaka kwanza. PGHOSTADDR hutoa mwisho wa nambari ambao hupita utatuzi wa majina wakati jina la mwenyeji bado linasimamia utambulisho wa cheti, na PGSERVICE huvuta mwenyeji, hifadhidata na chaguo za TLS kutoka faili la huduma. Kumwaga mazingira yote ili kurekebisha hili ni tabia mbaya, kwa kuwa yanaweza kuwa na nywila na tokeni zisizohusiana; badala yake chagua vigezo unavyojali.

Kuacha host na hostaddr zote mbili huchagua soketi ya kikoa cha Unix badala ya anwani ya mtandao. Kwa hiyo wito wa psql bila -h unaweza kufanikiwa ndani au kushindwa kwa hitilafu ya soketi, bila kugusa njia ambayo GUI inaitumia.

Tuma vigezo vile vile kwa mkono

Ukiwa na thamani za GUI mkononi, zipitishe kwa uwazi na uruke faili la kuanzia ambalo linaweza kuongeza ubatilishaji. Mfuatano wa muunganisho ulio chini ni mfano: badilisha mwisho, bandari, hifadhidata na jukumu kwa thamani zilizoidhinishwa na msimamizi wako, na uendelee na usanidi wa uaminifu ambao tayari unafanya kazi.

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

Maelezo matatu katika amri hiyo ni ya kukusudia. -X huzuia faili la kuanzia la psql, ingawa hailizuii mazingira ya libpq au ufafanuzi wa huduma. connect_timeout=5 huzuia njia tupu kuning'iniza terminal kwa dakika. sslmode=verify-full huweka ukaguzi wa cheti na jina la mwenyeji ukiwa umewashwa, na ndiyo sehemu ambayo watu huizima wakati hitilafu ya TLS inapotokea.

Iwapo mwisho ulioidhinishwa uko nyuma ya pooler, bandari 6432 na bandari 5432 zinaweza kufikia data moja kupitia utambulisho tofauti wa seva, na uthibitishaji unaweza kushindwa kwa jina la pooler badala ya la hifadhidata. Rekebisha jina katika mfuatano wa muunganisho badala ya kudhoofisha hali.

Acha ujumbe wa hitilafu uchague hatua inayofuata

Maandishi ya kushindwa yanasema jinsi jaribio lilivyofika mbali, na hilo linashinda dhana yoyote kuhusu handaki. Jina ambalo halitatuliwi hushindwa kabla soketi haijakuwepo, muda kuisha humaanisha kwamba njia au firewall ilitupa pakiti, kukataliwa humaanisha kwamba kitu kilijibu na kukataa, na hitilafu ya uthibitishaji humaanisha kwamba mtandao tayari ulifanya kazi.

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

Linganisha matokeo ya \conninfo na kikao hai cha GUI: mwenyeji yule yule, bandari ile ile, jukumu lile lile, hali ile ile ya TLS. Vile vinne vinapopatana, VPN haina la kueleza tena. Hadi vinapopatana, kila mabadiliko ya ziada ya handaki ni dhana kuhusu muunganisho ambao terminal haikuwahi kufanya.

Makala zinazohusiana