我们可以使用 SSH 对 PostgreSQL 服务器和客户端之间的网络连接进行加密。经过适当处理后,这样做可以获得一个足够安全的网络连接。即使是没有 SSL 的客户端上也如此。
首先确认 SSH 正在和 PostgreSQL 服务器的同一台机器上正确地运行,而且你可以通过某个用户用 ssh 登录。然后你可以用下面这样的命令从客户端的机器上建立一个安全通道:
ssh -L 3333:foo.com:5432 joe@foo.com
-L 参数的第一个数字(3333)是你这端通道的端口号,可以自由选择。第二个数字(5432)是通道的远端,也就是服务器使用的端口号。在两个端口号之间的名称或者 IP 地址是你准备连接的数据库服务器。为了使用这个通道与数据库服务器连接,你在本机于端口 3333 连接:
psql -h localhost -p 3333 postgres
对于数据库服务器而言,它会把你当做真正的用户 joe@foo.com 并且使用为这个用户和主机设置的认证手段进行认证。请注意,服务器不会认为连接是 SSL 加密的,因为实际上在 SSH 服务器和 PostgreSQL 服务器之间是没有加密的。只要它们在同一台机器上,这么做并不会导致任何安全漏洞。
为了保证能够成功地建立通道,你必须被允许作为 joe@foo.com 通过 ssh 建立连接,就像你使用 ssh 建立终端会话一样。
【提示】还有几种不同的产品可以提供安全的通道,所使用的过程类似我们刚刚描述的过程。