VPN psql-ді бөгемейді: клиентіңіз басқа жерге қосылады
psql мен GUI клиенті бір машинадан әртүрлі межелерге қосылуы мүмкін. VPN-ді кінәламас бұрын хост, сокет, рөл және TLS-ті салыстырыңыз.
Екі клиент бір ноутбукте отыр, бір туннельден өтеді, бірақ олардың тек біреуі ғана қосылады. Бұл салыстыру VPN таңдамалы деген дәлел сияқты көрінеді, ал әлдеқайда кең тараған түсініктеме екі клиенттің әртүрлі межелерге қосылуында. GUI өз хостын, портын, рөлін және TLS параметрлерін сақтап, қажет болғанда SSH жіберуін үнсіз құрады, ал psql қосылымды сіздің shell-іңіз бұрын орнатқан болуы мүмкін libpq әдепкі мәндерінен жинайды. Жұмыс істейтін қосылымды қайта жаңғырту — GUI параметрлерін оқу, ал туннельді қайта орнату емес.
Аңыз: бір жұмыс істеген клиент жолды дәлелдейді
Егер GUI қосылса, туннель трафикті тасымалдайды, және GUI дәлелдейтіні осы ғана. Ол psql қай мекенжайды шешетінін, қандай рөлмен аутентификацияланатынын немесе ашқан сокеті машинадан шығатынын айтпайды. Жол ортақ; параметрлер ортақ емес.
Жергілікті жіберу айырмашылықты ұлғайтады. GUI SSH арқылы жіберген порттағы 127.0.0.1-ге қосылуы мүмкін, және бұл тыңдаушы тек GUI сессиясының кезінде ғана болады. Жіберусіз localhost-қа бағытталған psql VPN-ге еш қатысы жоқ бас тартылған қосылым алады.
GUI шын мәнінде қолданатын межені оқыңыз
Қосылым қасиеттерін ашып, төрт мәнді көшіріңіз: хост, порт, дерекқор және рөл. Содан кейін туннель қосымша бетін іздеңіз, өйткені SSH жіберуі жеке мекенжайды жергілікті портқа айналдырып, 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 |
Әр жол әртүрлі қабатта сәтсіз болады, ал сіз алатын хабарлама сол қабатты атайды. Сақталған профильдің достық атын 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-нің айтары қалмайды. Олар сәйкес келмейінше, туннельдегі әрбір қосымша өзгеріс терминал ешқашан жасамаған қосылым туралы болжам.