2013-04-08 149 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

相關問題