Туннель көтеріледі, 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 деп қарау — келесі қосылымның қате диагностикалануының себебі.

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