د QGIS PostGIS SSH تونل: د TLS لپاره د سرور نوم وساتئ
د SSH لېږد QGIS ته یو ځایي پورټ ورکوي، خو ډیټابیس لا هم د TLS لپاره خپل ریښتینی نوم ته اړتیا لري. له hostaddr او loopback اورېدونکي سره د libpq خدمت وکاروئ.
تونل پورته راځي، 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 په توګه ورته کتل همدا هغه څه دي چې بل نښلون غلط تشخیص کیږي.