Туннель көтөрүлөт, QGIS туташат, ал эми кирүү маалымат базасынын хостун ордуна 127.0.0.1 деп атаган сертификат катасы менен өлөт. Кийинки азгырыктуу кадам — sslmode параметрин бошотуу, бул текшерүүнү үнсүз кылат жана сиз башында каалаган инсандык кепилдигин таштайт. Чыныгы маселе — жергиликтүү порт менен сервердин аты бир талаада сакталат. libpq кызмат жазуусу аларды бөлөт, ошондуктан сокет өткөрүлгөн портко барат, TLS сертификатка басылган атты дагы эле текшерет.

Кардар эмнеге туташып жатат деп ойлойт

«sslmode=verify-full» шартында libpq сервер сунуштаган сертификатты суралган хост аты менен салыштырат. Бул ат loopback дареги болсо, сертификат чыныгы маалымат базасынын хосту үчүн жарактуу болсо да, салыштыруу ишке ашпайт. SSH өткөрүү кайсы сокет байттарды ташый турганын өзгөртөт, кардар күтүшү керек болгон инсандыкты эмес. Бул эки түшүнүк бөлүнгөндөн кийин ката эми TLS бузулушуна окшобойт.

Өткөрүү — уруксат да эмес. PostgreSQL SSH сервери түзгөн туташууга өз эрежелерин дагы эле колдонот, ошондуктан бир нерсени өзгөртүүдөн мурун ташуу катмары менен маалымат базасынын катмарын өзүнчө кармаңыз.

Өткөрүүнү loopbackке гана байлаңыз

Угуучу QGIS машинасында болушу керек, башка жерде эмес. 127.0.0.1ди ачык атоо аны башка интерфейстерден алыс кармайт, ал эми байлоо дареги калтырылса, SSH кардарынын шлюз жөндөөлөрүнө жараша порт сыртка ачылышы мүмкүн.

ssh -N -L 127.0.0.1:15432:127.0.0.1:5432 [email protected]

Экинчи кош чекиттен кийинки барар жер SSH сервери тарабынан чечилет, ошондуктан бул мисал PostgreSQL sshd жайгашкан ошол эле хостдо деп болжолдойт; башка машинадагы маалымат базасына ошол дарек жана анын уруксаттары керек. Сеансты -N менен баштаңыз, ошондо эч кандай кабык ачылбайт, хост ачкычын текшерүүгө тийбеңиз жана QGISти күнөөлөөдөн мурун угуучунун пайда болгонун ырастаңыз. Порт мурда эле колдонулса, өткөрүү суроо учурунда эмес, ишке кирүүдө ишке ашпайт.

Ат менен сокетти бир кызмат жазуусуна салыңыз

Кызмат файлы бир туташууга текшерүү атын жана башка сокет барар жерин ташууга мүмкүндүк берет. Жазууну libpq кызматтарды издеген жерге сактаңыз же PGSERVICEFILE параметрин ага багыттаңыз.

[gis-via-ssh]
host=db.geo.example
hostaddr=127.0.0.1
port=15432
dbname=gisdb
user=gis_reader
sslmode=verify-full
gssencmode=disable
sslrootcert=/path/to/approved-root.crt

Бул жерде host сертификат текшерүүлөрү үчүн колдонулган инсандыкты сактайт, ал эми hostaddr пакеттерди өткөрүлгөн loopback портуна жөнөтөт, жана бул түзүлүш иштеши үчүн экөө тең керек. gssencmode=disable болбосо адегенде GSSAPI шифрлөөсү боюнча сүйлөшө турган билддерде маанилүү, анткени ал жол жаңы орнотулган TLS жөндөөлөрүн этибарга албайт. QGISтин PostgreSQL туташуу диалогунан кызматка аты боюнча шилтеме жасаңыз жана сырсөздү жалпы файлдын ичинде эмес, кадимки сурам аркылуу бериңиз. Жогорку аттар жана жолдор — толтургучтар; аларды өзүңүздүн бекитилген маанилериңиз менен алмаштырыңыз.

PostgreSQL туннелден кийин дагы эмнени текшерет

Сервер SSH хосттон, бул түзүлүштө loopbackтен келген туташууну көрөт жана аны хостко негизделген аутентификация эрежелери менен кезеги менен салыштырат. Маалымат базасындагы ролуңуз дагы эле аутентификациядан өтүшү керек, ал эми SSH кирүү өзү эле маалымат базасынын инсандыгын бербейт. Кардар болжолдогонду эмес, сервер эмнеге ишенээрин текшериңиз.

psql "service=gis-via-ssh" -c "select inet_server_addr(), current_user"

Иш бүткөндө өткөрүү сеансын жабыңыз; жергиликтүү жазуу андан кийин иштебей калат жана башка эч нерсе өзгөрбөйт. Маалымат базасына бир жол бүтүндөй GIS кардары үчүн VPN эмес, жана аны VPN деп кароо — кийинки туташуунун туура эмес диагноз коюлушунун себеби.

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