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

Холбоотой нийтлэлүүд