Postgresql 可以在两台Windows计算机之间建立SSH隧道吗?(没有第三方web服务器)
问题的目的是在两个数据库之间创建远程连接。我目前使用。我已经阅读了大量关于使用和创建SSH服务器的教程,但是它只在本地测试中起作用,当我在另一台计算机上尝试使用公共IP地址时,它不起作用Postgresql 可以在两台Windows计算机之间建立SSH隧道吗?(没有第三方web服务器),postgresql,ssh,putty,Postgresql,Ssh,Putty,问题的目的是在两个数据库之间创建远程连接。我目前使用。我已经阅读了大量关于使用和创建SSH服务器的教程,但是它只在本地测试中起作用,当我在另一台计算机上尝试使用公共IP地址时,它不起作用 为了防止这成为一个私有/特殊的问题,我将继续讨论如何在两台Windows计算机之间获得一个没有web服务器的SSH隧道。对于Windows用户来说,这确实是一个普遍的问题。我在公司里试过六台不同的电脑,在家里试过两台,结果总是一样的。从我在论坛和StackOverflow上所做的研究来看,这是一个常见的问题。我
为了防止这成为一个私有/特殊的问题,我将继续讨论如何在两台Windows计算机之间获得一个没有web服务器的SSH隧道。对于Windows用户来说,这确实是一个普遍的问题。我在公司里试过六台不同的电脑,在家里试过两台,结果总是一样的。从我在论坛和StackOverflow上所做的研究来看,这是一个常见的问题。我附上了两张图片,以显示SSH服务器在本地运行正常,但当您使用服务器分配的IP地址时,它会失败 我开始认为在Windows环境下这样做是个坏主意。。ps.1-安装bitvise时,它会自动“打开”端口22,因此我认为这不是端口问题。2-我公司的互联网供应商和家庭的不同,所以我认为这也不是ISP的问题。我不知道还能有什么
是的,这是可能的,但具体需要做什么取决于您的设置。web服务器不应该是必需的或相关的。我不清楚您想要什么样的连接,但一般来说,您需要三件事:
plink
进行自动连接。Navicat本身也可以充当SSH客户机,通过SSH登录并自动配置隧道,但我没有使用该工具的经验。不过,腻子肯定对初始测试有用
第2项可能有点棘手:您需要安装SSH服务器并配置适当的登录
第3项可能是问题,也可能不是问题:客户端和服务器旁边可能都有防火墙,它可能会限制构成SSH连接的流量(通常在端口22上),或者它可能已经打开并准备好使用。一种测试方法是从另一个位置运行telnet address.of.remote.machine 22
。如果连接失败,那么该端口上的连接将被阻塞;在这种情况下,您可能需要与服务器的主机交谈,询问他们是否可以打开该端口
一旦所有这些都正常工作,您就可以使用PuTTY手动登录,您需要在客户端配置SSH隧道。这些基本上是通过使客户端上的本地网络端口(例如,端口5433)通过SSH连接连接到服务器上的另一个端口(对于标准Postgres安装,端口5432)来工作的
因此,当您告诉Navicat连接到“localhost:5433”时,连接是“隧道式”的,实际上会从其他服务器上的端口5432向您提供数据。你不会告诉NavigAT它是连接到远程机器的公共地址的,因为它只会在公共互联网上,而不是SSH隧道。 < P>如果你试图重新发明一个生产就绪解决方案。
如果只想在数据库之间复制选定的数据,可以使用附加模块将数据直接从数据库复制到数据库,也可以选择使用SSL加密。服务器可以位于网络中的任何位置 从另一个数据库(网络中的任何位置)获取数据的基本示例如下所示:
CREATE TABLE tbl (tbl_id integer, col1 text, col2 text);
SELECT dblink_connect('myserver');
-- FDW postgresql, USER MAPPING FOR postgres; PW from .pgpass
INSERT INTO tbl (tbl_id, col1, col2) -- same table exists on foreign server
SELECT *
FROM dblink('SELECT tbl_id, col1, col2 FROM tbl') AS b(
tbl_id integer
,col1 text
,col2 text);
SELECT dblink_disconnect();
您可以轻松地将其封装在函数中:
CREATE OR REPLACE FUNCTION foo()
RETURNS text AS
$func$
-- code from above goes here
$func$ LANGUAGE sql;
电话:
我在这里用的是一个。要创建的基本示例语句:
(只有在您还没有的情况下):
:
为了简化和确保安全,我使用提供密码。您可能需要先阅读一些文档,然后才能使用这些工具。您可以通过SSH手动从一台机器登录到另一台机器吗?听起来这可能是一个人际关系问题。首先描述一下你真正想要实现的目标。您正在自由地混合术语:
创建ssh服务器
?这不是一个恰当的问题。我想我理解“创建ssh服务器”——与Linux或Unix不同,Windows机箱不会安装现成的ssh服务器。然而,你所说的“两个postgresql数据库之间的远程连接”是什么意思?你到底在用这个连接做什么?复制?我很抱歉@ErwinBrandstetter和Balthus,这次我会尽量让自己更清楚。最终目标是使用ssh连接同步两个数据库(navicat具有内置ssh登录功能)。现在,为了实现这一点,我为windows安装了一个ssh服务器(如openssh、bitvise等)。问题是,一旦服务器运行,当我在会话类别中的destination字段中键入127.0.0.1时,它就可以完美地连接(localhost)。但是,当我键入isp分配给我的公共地址时,putty没有连接,它只会打开cmd屏幕,光标被卡住。好的,听起来好像一台DB服务器实际上也是运行客户端工具的服务器。数据库之间没有这样的连接,Navicat正在从一个数据库中提取数据/配置并将其推送到另一个数据库。这听起来对吗?欧文,我非常感谢你花时间详细说明答案,这似乎是一种更专业的方法。在开始通过navicat进行同步之前,我已经阅读了很多关于复制的内容;我之所以选择后者,是因为只涉及2个表,而且复制增加了冲突问题。所以,我
SELECT foo();
CREATE FOREIGN DATA WRAPPER postgresql VALIDATOR postgresql_fdw_validator;
CREATE SERVER myserver
FOREIGN DATA WRAPPER postgresql
OPTIONS (hostaddr '1.2.3.4', port '5432', dbname 'mydb', sslmode 'require');
CREATE USER MAPPING FOR postgres
SERVER myserver OPTIONS (user 'postgres');