使用 ssh 連入 Docker 中的 PostgreSQL
連到遠端的 database 有幾種方式
method | description |
---|---|
password | 透過 TCP/IP 連入,最基本的方法,缺點是 port 會暴露給外界 |
ssh | 使用 ssh tunnel 的方式連入 |
proxy | 透過 proxy 連入,可在 proxy 管理連線,firewall 也只需認他 |
ssl | 透過 https 連入,與 password 的缺點一樣 |
這裡介紹如何在機器上設定 ssh 連線
iptables 設定
這裡透過 ufw
進行設定,主要就是增加一條 127.0.0.1:5432
的 rule
# to any 是為了程式
ufw allow from 127.0.0.1 to any port 5432
docker 設定
docker 會建立獨特的 iptables rules 去達成網路環境隔離的效果,他的優先權比 ufw 高因此需再對 docker 做設定,有幾種方法
- systemd: 於啟動處增加參數
--iptables=false
- daemon.json: 於
/etc/docker/daemon.json
寫入{"iptables":false}
- bind ip:port
第三個方法比較適用,這裡列出 docker-compose 的寫法
services:
db:
image: postgres
volumes:
- ./.docker/postgres/postgres.conf:/var/lib/postgresql/data/postgresql.conf
- ./.docker/postgres/pg_hba.conf:/var/lib/postgresql/data/pg_hba.conf
ports:
- '127.0.0.1:5432:5432'
PostgreSQL 設定
於 pg_hba.conf
增加來自 docker 的連線(ssh tunnel)設定以及對所有來源開放(程式)的連線設定
# TYPE DATABASE USER ADDRESS METHOD
host all all host.docker.internal trust
host all all 0.0.0.0/0 md5
上述設定都完成後就可以透過任一個 GUI tool 走 ssh 連線了
References
發佈時間
2022-9-6