Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 可以在两台Windows计算机之间建立SSH隧道吗?(没有第三方web服务器)_Postgresql_Ssh_Putty - Fatal编程技术网

Postgresql 可以在两台Windows计算机之间建立SSH隧道吗?(没有第三方web服务器)

Postgresql 可以在两台Windows计算机之间建立SSH隧道吗?(没有第三方web服务器),postgresql,ssh,putty,Postgresql,Ssh,Putty,问题的目的是在两个数据库之间创建远程连接。我目前使用。我已经阅读了大量关于使用和创建SSH服务器的教程,但是它只在本地测试中起作用,当我在另一台计算机上尝试使用公共IP地址时,它不起作用 为了防止这成为一个私有/特殊的问题,我将继续讨论如何在两台Windows计算机之间获得一个没有web服务器的SSH隧道。对于Windows用户来说,这确实是一个普遍的问题。我在公司里试过六台不同的电脑,在家里试过两台,结果总是一样的。从我在论坛和StackOverflow上所做的研究来看,这是一个常见的问题。我

问题的目的是在两个数据库之间创建远程连接。我目前使用。我已经阅读了大量关于使用和创建SSH服务器的教程,但是它只在本地测试中起作用,当我在另一台计算机上尝试使用公共IP地址时,它不起作用


为了防止这成为一个私有/特殊的问题,我将继续讨论如何在两台Windows计算机之间获得一个没有web服务器的SSH隧道。对于Windows用户来说,这确实是一个普遍的问题。我在公司里试过六台不同的电脑,在家里试过两台,结果总是一样的。从我在论坛和StackOverflow上所做的研究来看,这是一个常见的问题。我附上了两张图片,以显示SSH服务器在本地运行正常,但当您使用服务器分配的IP地址时,它会失败

我开始认为在Windows环境下这样做是个坏主意。。ps.1-安装bitvise时,它会自动“打开”端口22,因此我认为这不是端口问题。2-我公司的互联网供应商和家庭的不同,所以我认为这也不是ISP的问题。我不知道还能有什么


是的,这是可能的,但具体需要做什么取决于您的设置。web服务器不应该是必需的或相关的。我不清楚您想要什么样的连接,但一般来说,您需要三件事:

  • 每个需要登录到远程数据库的计算机上的SSH客户端
  • 每个需要接受远程登录的计算机上都有一个SSH服务器
  • 通过防火墙等从一个连接到另一个的能力
  • 第1项很简单:您可以安装PuTTY,使用其图形应用程序进行测试,并使用命令行
    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');