VPN psql نه بندوي: ستاسو کلاینټ بل ځای ته ډایل کوي
psql او GUI کلاینټ کولی شي له یوې ماشین څخه بېلو پای ټکو ته ډایل وکړي۔ د VPN په غندلو دمخه هوسټ، ساکټ، رول او TLS پرتله کړئ۔
دواړه کلاینټونه په یوه لیپ ټاپ کې دي، له یوه ټنل څخه تېرېږي، او یوازې یو یې نښلېږي۔ دا پرتله د دې ثبوت ښکاري چې VPN ټاکونکی دی، حال دا چې ډېر عام توضیح دا دی چې دواړه کلاینټونه مختلفو منزلونو ته ډایل کوي۔ یو GUI خپل هوسټ، پورټ، رول او TLS تنظیمات ساتي او کله چې اړتیا وي په غلیمانه توګه SSH لېږد جوړوي، حال دا چې psql د خپل شل هغه libpq ډیفالټونو څخه چې کېدای شي مخکې تنظیم کړي وي، اړیکه جوړوي۔ د فعالې اړیکې بیا جوړول د GUI تنظیمات لوستل دي، نه د ټنل بیا نصبول۔
افسانه: یو فعال کلاینټ لاره ثبوتوي
که GUI ونښلېږي، ټنل ټرافیک وړي، او GUI یوازې همدا ثبوتوي۔ دا هېڅ نه وایي چې psql کوم پته حل کوي، په کوم رول تصدیق کوي، یا هغه ساکټ چې پرانیزي کله هم له ماشین څخه وځي۔ لاره شریکه ده؛ پارامترونه نه۔
محلي لېږد توپیر زیاتوي۔ GUI کېدای شي په هغه پورټ کې چې SSH ته لېږلی، له 127.0.0.1 سره ونښلېږي، او هغه اورېدونکی یوازې د GUI ناستې تر پایه شته۔ psql چې پرته له لېږد localhost ته اشاره کوي، رد شوې اړیکه ترلاسه کوي چې 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 له ستاسو شل څخه څه میراث اخلي
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 پر نوم ناکام شي۔ د حالت کمزوري کولو پرځای د اړیکې کرښه کې نوم سم کړئ۔
پرېږدئ چې د تېروتنې پیغام بل ګام وټاکي
د ناکامۍ متن وایي چې هڅه څومره لرې لاړه، او دا د ټنل په اړه هر اټکل ماتوي۔ هغه نوم چې نه حل کېږي د ساکټ له جوړېدو مخکې ناکامېږي، د وخت پای ته رسېدل معنا دا ده چې لار یا فایر وال پاکټونه غورځولي، ردول معنا دا ده چې یو څه ځواب ورکړ او انکار یې وکړ، او تصدیق تېروتنه معنا دا ده چې شبکه لا دمخه کار کاوه۔
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 ته د تشریح کولو نور څه نه پاتې کېږي۔ تر څو چې نه وي سم شوي، په ټنل کې هره اضافي بدلون د هغې اړیکې په اړه اټکل دی چې ټرمینل هېڅکله نه ده جوړه کړې۔