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 postgres

对于数据库服务器而言,她会把你当做真正的用户 joe@foo.com 并且使用为这个用户和主机设置的认证手段进行认证。 请注意,服务器不会认为连接是 SSL 加密的,因为实际上在 SSH 服务器和 PostgreSQL 服务器之间是没有加密的。 只要它们在同一台机器上,这么做并不会导致任何安全漏洞。

为了保证能够成功地建立通道,你必须被允许作为 joe@foo.com 通过ssh建立联接, 就象你使用ssh建立终端会话一样。

提示: 还有几种不同的产品可以提供安全的通道,所使用的过程类似我们刚刚描述的过程。