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