2013-04-08 126 views
3

问题的目的是在两个PostgreSQL数据库之间创建远程连接。我目前使用Navicat。我已经阅读很多关于使用PuTTYCygwin创建SSH服务器的教程,但它只适用于本地测试,当我尝试使用其他计算机上的公共IP地址时,它不适用于本地测试。是否可以在两台Windows计算机之间建立SSH隧道? (没有第三方Web服务器)

为了防止这成为一个私人/特殊问题,我将坚持如何在两台Windows计算机之间没有Web服务器的情况下获得SSH隧道。这对于Windows用户来说确实是一个普遍问题。我已经在我的公司有六台不同的电脑,有两台在家,而且一直都是同样的答案。从我在论坛和堆栈中进行的研究 溢出这是一个常见问题。我附上了两张图片来表明SSH服务器在本地运行平稳,但是当您使用由您的ISP分配的IP地址时,它会失败。

我开始认为在Windows环境中这样做是一个坏主意.. ps。 1-当你安装bitvise它会自动'打开'22端口,所以我认为这不是端口问题。 2-我公司的互联网提供商和家庭不同,所以我认为这不是一个ISP问题。我不知道它是一个什么更多...

http://matheus25.site90.net/itworks.jpg

http://matheus25.site90.net/itdoesntwork.jpg

+0

你可以通过SSH从一台机器手动登录到另一台机器吗?听起来这可能是一个网络问题。 – 2013-04-08 15:01:40

+0

首先描述你实际上想要达到的目标。你在自由地混合术语:“创建ssh服务器”?它代表这不是一个适当的问题。 – 2013-04-08 16:22:21

+0

我想我明白“创建ssh服务器” - 与Linux或Unix不同,Windows的一个盒子没有安装SSH服务器。但是,“两个postgresql数据库之间的远程连接”意味着什么? - 你对这个连接做了什么?复制? – IMSoP 2013-04-08 16:56:38

回答

1

是的,这是可能的,但正是你需要做的将取决于你有什么设置什么。 Web服务器不应该是必需的或相关的。我不清楚你想要什么联系,但一般需要三样东西:

  1. 的SSH客户端,每个需要登录到远程数据库
  2. 的SSH 服务器上 ,每一个需要接受远程登录
  3. 通过任何防火墙等坐在之间

项目从一个连接到其他的能力,机上1很简单:你可以安装推杆Y,使用其图形应用程序进行测试,并使用命令行plink进行自动连接。 Navicat可能也可以充当SSH客户端本身,通过SSH登录并自动配置隧道,但我没有该工具的使用经验。尽管如此,PuTTY对于初始测试肯定会有用。

第2项可能会有点棘手:您需要安装SSH服务器并配置适当的登录名。

第3项可能是也可能不是问题:客户端和服务器旁边可能有一个防火墙可能会限制构成SSH连接的流量(通常在端口22上),或者它可能已经打开并准备就绪使用。测试此方法的一种方法是从另一个位置运行telnet address.of.remote.machine 22。如果连接失败,则阻塞该端口上的连接;在这种情况下,您可能需要与服务器的主机通话,询问他们是否可以打开该端口。

一旦所有的工作都可以使用PuTTY手动登录,您需要在客户端上配置您的SSH隧道。基本上这些工作是通过在客户端上建立一个本地网络端口(比如端口5433),通过SSH连接,连接到服务器上的另一个端口(对于标准的Postgres安装,端口5432)。

所以,当你告诉Navicat的连接为“localhost:5433”,连接“隧道”,实际上给你一些其他的服务器在其他地方从端口5432的数据。你会不会告诉它连接到远程计算机的公共地址Navicat的,因为这将只是去通过公共互联网,而不是SSH隧道。

+0

感谢您对@IMSoP的支持,迄今为止您已经覆盖了比其他教程更好的步骤。但是,当你从本地网络转移到互联网时,就会出现巨大的挑战。我建议你看看我的问题的更新部分,以了解普通用户在使用他的公共IP时会发生什么。 – 2013-04-08 19:46:52

+0

我非常认为这是一个防火墙问题,很可能在您的ISP:如果他们本身不支持SSH,他们可能已经关闭了防火墙的端口。一种测试方法是从另一个地方运行telnet address.of.remote.machine 22。如果连接失败,则会阻止该端口上的连接。 – IMSoP 2013-04-08 19:57:13

+0

@MikaelBlomkvist对不起,“您的ISP”是指“您的远程服务器的托管提供商”。如果可以打开端口22,则可能需要很好地询问它们,因为它可能不在Windows服务器的标准列表中。 – IMSoP 2013-04-08 20:07:51

1

如果你想重新发明database replication考虑到生产就绪的解决方案之一。


如果你只是想数据库之间选择的数据复制,您可以使用额外的模块dblink直接从数据库复制数据到DB,可选使用SSL加密。网络中的服务器可以是的任何地方

一个基本的例子,从另一个数据库(在网的任何地方)获取的数据看起来是这样的:

CREATE OR REPLACE FUNCTION foo() 
    RETURNS text AS 
$func$ 
-- code from above goes here 
$func$ LANGUAGE sql; 

电话:

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(); 

你可以很容易地在一个函数封装这个

SELECT foo(); 

我在这里使用的是FOREIGN SERVER。基本的例子语句来创建:

FDW(前提是你还没有的话):

CREATE FOREIGN DATA WRAPPER postgresql VALIDATOR postgresql_fdw_validator; 

Foreign server

CREATE SERVER myserver 
FOREIGN DATA WRAPPER postgresql 
OPTIONS (hostaddr '1.2.3.4', port '5432', dbname 'mydb', sslmode 'require');

通过添加sslmode 'require'到连接字符串你执行SSL加密仅连接。 Read more in the manual here.

User mapping

CREATE USER MAPPING FOR postgres 
SERVER myserver OPTIONS (user 'postgres'); 

,并简化事情,并使其安全我使用.pgpass file提供密码。您可能需要阅读某些文档,然后再使用这些内容。

+0

埃尔文我非常感谢你的时间阐述了答案,似乎是一个更专业的方法。在开始通过navicat进行同步之前,我已经阅读了很多关于复制的内容;我选择了后者,因为只涉及2个表,并且复制增加了冲突问题。所以,我已经满意的按下数据同步按钮,它插入/更新表格,它只能在本地工作的重要事情,因此我现在正在努力如何在**远程**级别上进行此过程。 SSH似乎是答案,但我无法让它工作。 – 2013-04-08 18:57:14

+0

为了防止这成为一个私人/特定的问题,我会坚持如何获得没有Web服务器的SSH隧道。这对于Windows用户来说确实是一个普遍问题。我已经在我公司的6台不同的计算机上试过,而在家里的2台计算机上试过的时间都是相同的答案。从我在论坛上做的研究以及在这里,这是一个常见问题。我附上了两张图片来显示ssh服务器在本地运行平稳,但是当您使用由isp分配的ip时,它会失败。我开始认为在Windows环境中这样做是一个坏主意。 – 2013-04-08 19:32:28

+0

http://matheus25.site90.net/itworks.jpg http://matheus25.site90.net/itdoesntwork.jpg – 2013-04-08 19:33:21

相关问题