Екі клиент бір ноутбукте отыр, бір туннельден өтеді, бірақ олардың тек біреуі ғана қосылады. Бұл салыстыру VPN таңдамалы деген дәлел сияқты көрінеді, ал әлдеқайда кең тараған түсініктеме екі клиенттің әртүрлі межелерге қосылуында. GUI өз хостын, портын, рөлін және TLS параметрлерін сақтап, қажет болғанда SSH жіберуін үнсіз құрады, ал psql қосылымды сіздің shell-іңіз бұрын орнатқан болуы мүмкін libpq әдепкі мәндерінен жинайды. Жұмыс істейтін қосылымды қайта жаңғырту — GUI параметрлерін оқу, ал туннельді қайта орнату емес.

Аңыз: бір жұмыс істеген клиент жолды дәлелдейді

Егер GUI қосылса, туннель трафикті тасымалдайды, және GUI дәлелдейтіні осы ғана. Ол psql қай мекенжайды шешетінін, қандай рөлмен аутентификацияланатынын немесе ашқан сокеті машинадан шығатынын айтпайды. Жол ортақ; параметрлер ортақ емес.

Жергілікті жіберу айырмашылықты ұлғайтады. GUI SSH арқылы жіберген порттағы 127.0.0.1-ге қосылуы мүмкін, және бұл тыңдаушы тек GUI сессиясының кезінде ғана болады. Жіберусіз localhost-қа бағытталған psql VPN-ге еш қатысы жоқ бас тартылған қосылым алады.

GUI шын мәнінде қолданатын межені оқыңыз

Қосылым қасиеттерін ашып, төрт мәнді көшіріңіз: хост, порт, дерекқор және рөл. Содан кейін туннель қосымша бетін іздеңіз, өйткені SSH жіберуі жеке мекенжайды жергілікті портқа айналдырып, 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

Әр жол әртүрлі қабатта сәтсіз болады, ал сіз алатын хабарлама сол қабатты атайды. Сақталған профильдің достық атын psql-ге қою жоғарыдағы мәндердің ешқайсысын тасымалдамайды, ал қызмет аты терминал ешқашан оқымауы мүмкін файл арқылы шешіледі.

libpq сіздің shell-іңізден нені мұраланады

psql — libpq үстіндегі жұқа клиент, ал libpq барлық нәрседен бұрын ортаны оқиды. PGHOST, PGHOSTADDR, PGPORT, PGDATABASE, PGUSER, PGSERVICE және PGSSLMODE сияқты айнымалылардың әрқайсысы қосылымның бір бөлігін басқа жаққа бағыттай алады. Олар терілмейді, мұраланады, сондықтан сіз іске қосқан пәрменде олардың ешқайсысы көрінбейді. Экспортталған PGSSLMODE те пәрмен жолында бір сөз айтпай-ақ клиент қабылдайтынды өзгерте алады.

Бұл айнымалылардың екеуі бірінші кезекте күдік тудырады. PGHOSTADDR аттарды шешуді басып тастайтын сандық межені береді, ал хост аты әлі де сертификаттың жеке басын анықтайды, ал PGSERVICE хостты, дерекқорды және TLS таңдауларын қызмет файлынан тартып алады. Мұны жөндеу үшін бүкіл ортаны шығару жаман әдет, өйткені онда құпиясөздер мен қатысы жоқ токендер болуы мүмкін; оның орнына өзіңізге маңызды айнымалыларды таңдаңыз.

host пен hostaddr-ды бірге қалдыру желілік мекенжайдың орнына Unix доменінің сокетін таңдайды. Сондықтан -h жоқ psql шақыруы жергілікті жерде сәтті болуы немесе сокет қатесімен сәтсіз аяқталуы мүмкін, GUI қолданатын бағытқа еш тимей-ақ.

Сол параметрлерді қолмен жіберіңіз

GUI мәндері қолыңызда болса, оларды анық түрде беріңіз және қайта анықтаулар қоса алатын іске қосу файлын өткізіп жіберіңіз. Төмендегі қосылым жолы мысал ретінде: межені, портты, дерекқорды және рөлді әкімшіңіз мақұлдаған мәндерге ауыстырып, қазірдің өзінде жұмыс істеп тұрған сенім конфигурациясын сақтаңыз.

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

Бұл пәрмендегі үш бөлшек әдейі. -X psql-дің іске қосу файлын басады, бірақ libpq ортасын немесе қызмет анықтамасын баспайды. connect_timeout=5 бос бағыттың терминалды минуттар бойы іліп қоюына жол бермейді. sslmode=verify-full сертификат пен хост атын тексеруді қосулы ұстайды, ал TLS қатесі шыққанда адамдар дәл осы бөлікті өшіреді.

Егер мақұлданған меже pooler-дің артында болса, 6432 порты мен 5432 порты бір деректерге әртүрлі сервер идентификаторлары арқылы жетуі мүмкін, және тексеру дерекқордың емес, pooler атының себебінен сәтсіз болуы мүмкін. Режимді әлсіретпей, қосылым жолындағы атауды түзетіңіз.

Келесі қадамды қате хабарламасы таңдасын

Сәтсіздік мәтіні әрекеттің қаншалықты алысқа барғанын айтады, және бұл туннель туралы кез келген болжамнан артық. Шешілмейтін ат сокет пайда болмай тұрып сәтсіз болады, уақыт бітуі бағыттың немесе firewall-дың пакеттерді тастағанын білдіреді, бас тарту бірдеңенің жауап беріп, бас тартқанын, ал аутентификация қатесі желінің әлдеқашан жұмыс істегенін білдіреді.

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

\conninfo шығысын GUI-дің тірі сессиясымен салыстырыңыз: сол хост, сол порт, сол рөл, сол TLS күйі. Осы төртеуі сәйкес келсе, VPN-нің айтары қалмайды. Олар сәйкес келмейінше, туннельдегі әрбір қосымша өзгеріс терминал ешқашан жасамаған қосылым туралы болжам.

Қатысты мақалалар