16.8. 用SSH隧道進行安全 TCP/IP 連線

我們可以使用 SSHPostgreSQL 伺服器和客戶端之間的網絡連線進行加密。經過適當處理後,這樣做可以獲得一個足夠安全的網絡連線。 即使是沒有 SSL 的客戶端上也如此。

首先確認 SSH 正在和 PostgreSQL 伺服器的同一台機器上正確地執行, 而且您可以透過某個用戶用SSH登錄。然後您可以用下面這樣的命令從客戶端的機器上建立一個安全通道:

ssh -L 3333:foo.com:5432 joe@foo.com

-L 參數的第一個數字,3333,是通道您這端的連接埠號;可以自由選擇。 第二個數字,5432,是通道的遠端:您的伺服器使用的連接埠號。 在兩個連接埠號之間的名稱或者 IP 地址是您準備連線的資料庫伺服器。 為了使用這個通道與您的資料庫伺服器連線,您在本機於連接埠 3333 連線:

psql -h localhost -p 3333 template1

對於資料庫伺服器而言,她會把您當做真正的用戶 joe@foo.com 並且使用為這個用戶和主機設置的認證手段進行認證。 請注意,伺服器不會認為連接是 SSL 加密的,因為實際上在 SSH 伺服器和 PostgreSQL 伺服器之間是沒有加密的。 只要它們在同一台機器上,這麼做並不會導致任何安全漏洞。

為了保證能夠成功地建立通道,您必須被允許作為 joe@foo.com 透過ssh建立連線, 就像您使用ssh建立終端會話一樣。

提示: 還有幾種不同的產品可以提供安全的通道,所使用的過程類似我們剛剛描述的過程。