Эки клиент тең бир ноутбукта, бир туннелден өтөт, бирок алардын бирөө гана туташат. Бул салыштыруу 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 ге айтары калбайт. Алар дал келмейинче, туннелдеги ар бир кошумча өзгөртүү терминал эч качан жасабаган туташуу жөнүндө божомол.

Тектеш макалалар