VPN psql ಅನ್ನು ತಡೆಯುತ್ತಿಲ್ಲ: ನಿಮ್ಮ ಕ್ಲೈಂಟ್ ಬೇರೆಡೆಗೆ ಡಯಲ್ ಮಾಡುತ್ತಿದೆ
psql ಮತ್ತು GUI ಕ್ಲೈಂಟ್ ಒಂದೇ ಯಂತ್ರದಿಂದ ಬೇರೆ ಬೇರೆ ಎಂಡ್ಪಾಯಿಂಟ್ಗಳಿಗೆ ಡಯಲ್ ಮಾಡಬಹುದು. VPN ಅನ್ನು ದೂಷಿಸುವ ಮೊದಲು ಹೋಸ್ಟ್, ಸಾಕೆಟ್, ಪಾತ್ರ ಮತ್ತು TLS ಹೋಲಿಸಿ.
ಎರಡೂ ಕ್ಲೈಂಟ್ಗಳು ಒಂದೇ ಲ್ಯಾಪ್ಟಾಪ್ನಲ್ಲಿವೆ, ಒಂದೇ ಸುರಂಗದ ಮೂಲಕ ಹಾದುಹೋಗುತ್ತವೆ, ಮತ್ತು ಅವುಗಳಲ್ಲಿ ಒಂದೇ ಸಂಪರ್ಕಗೊಳ್ಳುತ್ತದೆ. ಆ ಹೋಲಿಕೆ VPN ಆಯ್ದುಕೊಳ್ಳುತ್ತದೆ ಎಂಬ ಸಾಕ್ಷ್ಯದಂತೆ ತೋರುತ್ತದೆ, ಆದರೆ ಹೆಚ್ಚು ಸಾಮಾನ್ಯ ವಿವರಣೆ ಎಂದರೆ ಎರಡೂ ಕ್ಲೈಂಟ್ಗಳು ಬೇರೆ ಬೇರೆ ಗಮ್ಯಸ್ಥಾನಗಳಿಗೆ ಡಯಲ್ ಮಾಡುತ್ತವೆ. ಒಂದು GUI ತನ್ನದೇ ಹೋಸ್ಟ್, ಪೋರ್ಟ್, ಪಾತ್ರ ಮತ್ತು TLS ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ಇಟ್ಟುಕೊಂಡು ಅಗತ್ಯವಿದ್ದಾಗ ಸದ್ದಿಲ್ಲದೆ SSH ಫಾರ್ವರ್ಡ್ ನಿರ್ಮಿಸುತ್ತದೆ, ಆದರೆ psql ನಿಮ್ಮ ಶೆಲ್ ಈಗಾಗಲೇ ಹೊಂದಿಸಿರಬಹುದಾದ libpq ಡೀಫಾಲ್ಟ್ಗಳಿಂದ ಸಂಪರ್ಕ ಜೋಡಿಸುತ್ತದೆ. ಕೆಲಸ ಮಾಡುವ ಸಂಪರ್ಕವನ್ನು ಮರುಸೃಷ್ಟಿಸುವುದು GUI ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ಓದುವ ವಿಷಯ, ಸುರಂಗವನ್ನು ಮತ್ತೆ ಸ್ಥಾಪಿಸುವುದಲ್ಲ.
ಪುರಾಣ: ಒಂದು ಕೆಲಸ ಮಾಡುವ ಕ್ಲೈಂಟ್ ಮಾರ್ಗವನ್ನು ಸಾಬೀತುಪಡಿಸುತ್ತದೆ
GUI ಸಂಪರ್ಕಗೊಂಡರೆ ಸುರಂಗ ಸಂಚಾರವನ್ನು ಸಾಗಿಸುತ್ತದೆ, ಮತ್ತು GUI ಸಾಬೀತುಪಡಿಸುವುದು ಅಷ್ಟೇ. psql ಯಾವ ವಿಳಾಸವನ್ನು ಪರಿಹರಿಸುತ್ತದೆ, ಯಾವ ಪಾತ್ರದಿಂದ ದೃಢೀಕರಿಸುತ್ತದೆ, ಅಥವಾ ಅದು ತೆರೆಯುವ ಸಾಕೆಟ್ ಎಂದಾದರೂ ಯಂತ್ರದಿಂದ ಹೊರಬರುತ್ತದೆಯೇ ಎಂಬುದನ್ನು ಅದು ಹೇಳುವುದಿಲ್ಲ. ಮಾರ್ಗ ಹಂಚಿಕೆಯಾಗಿದೆ; ನಿಯತಾಂಕಗಳು ಅಲ್ಲ.
ಸ್ಥಳೀಯ ಫಾರ್ವರ್ಡ್ ಅಂತರವನ್ನು ಹೆಚ್ಚಿಸುತ್ತದೆ. GUI SSH ಮೂಲಕ ಫಾರ್ವರ್ಡ್ ಮಾಡಿದ ಪೋರ್ಟ್ನಲ್ಲಿ 127.0.0.1 ಗೆ ಸಂಪರ್ಕಗೊಳ್ಳಬಹುದು, ಮತ್ತು ಆ ಆಲಿಸುವವನು GUI ಅಧಿವೇಶನ ಇರುವವರೆಗೆ ಮಾತ್ರ ಇರುತ್ತದೆ. ಫಾರ್ವರ್ಡ್ ಇಲ್ಲದೆ localhost ಗೆ ತೋರಿಸುವ psql ಗೆ 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 ವಿವರಿಸಲು ಏನೂ ಉಳಿಯುವುದಿಲ್ಲ. ಅವು ಹೊಂದಿಕೆಯಾಗುವವರೆಗೆ, ಸುರಂಗದ ಪ್ರತಿ ಹೆಚ್ಚುವರಿ ಬದಲಾವಣೆಯೂ ಟರ್ಮಿನಲ್ ಎಂದೂ ಮಾಡದ ಸಂಪರ್ಕದ ಬಗ್ಗೆ ಊಹೆಯೇ.