2017-05-08 94 views
1

我無法通過本地機器與AWS postgres remote進行連接。如何連接AWS PostgreSQL數據庫中的pgAdmin3?

我絕對不會連接到AWS服務器中的postgres remote。

我已經按照另一個主題,但我仍然混淆爲什麼不連接任何地方?

在我的遠程服務器我遵循這個3步:

1)更改遠程數據庫的端口5434

2)在postgresql.conf文件中,將「*」設置爲listen_addresses標誌。

pg_hba.conf文件I設置host all all 0.0.0.0/0 md5屬性

3)我重新啓動Postgres的遠程服務器的服務

PgAdmin3錯誤輸出:

05:17:44 PM: Error: SSH error: Error when starting up SSH session with error code -8 [Unable to exchange encryption keys]

我還沒有成功訪問Postgres的遙控器AWS RDBMS。我遵循這個指示:http://imperialwicket.com/aws-install-postgresql-90-on-amazon-linux

截圖:

我按照下面的所有主題:

enter image description here

我configurate pgAdmin3到如下訪問:

  • MY_IP_HERE我與AWS的IPv4
  • my_user_here我將與我的數據庫用戶

設置。

enter image description here

enter image description here

然後我嘗試用HTTP隧道連接我的遠程數據庫

enter image description here

而我失敗

enter image description here

有時會出現在pgAdmin3這個彈出錯誤:

ASSERT INFO: 
/usr/include/wx-3.0/wx/strvararg.h(456): assert "(argtype & (wxFormatStringSpecifier<T>::value)) == argtype" failed in wxArgNormalizer(): format specifier doesn't match argument type 

BACKTRACE: 
[1] wxMBConvUTF32LE::~wxMBConvUTF32LE() 
[2] char* std::string::_S_construct<char*>(char*, char*, std::allocator<char> const&, std::forward_iterator_tag) 
[3] char* std::string::_S_construct<char*>(char*, char*, std::allocator<char> const&, std::forward_iterator_tag) 
[4] char* std::string::_S_construct<char*>(char*, char*, std::allocator<char> const&, std::forward_iterator_tag) 
[5] wxListEvent::~wxListEvent() 
[6] wxAppConsoleBase::CallEventHandler(wxEvtHandler*, wxEventFunctor&, wxEvent&) const 
[7] wxEvtHandler::ProcessEventIfMatchesId(wxEventTableEntryBase const&, wxEvtHandler*, wxEvent&) 
[8] wxEvtHandler::SearchDynamicEventTable(wxEvent&) 
[9] wxEvtHandler::TryHereOnly(wxEvent&) 
[10] wxEvtHandler::DoTryChain(wxEvent&) 
[11] wxEvtHandler::ProcessEvent(wxEvent&) 
[12] wxWindowBase::TryAfter(wxEvent&) 
[13] wxEvtHandler::SafelyProcessEvent(wxEvent&) 
[14] wxToolBarBase::OnLeftClick(int, bool) 
[15] g_signal_emit_valist 
[16] g_signal_emit_by_name 
[17] g_signal_emit_valist 
[18] g_signal_emit 
[19] g_closure_invoke 
[20] g_signal_emit_valist 
[21] g_signal_emit 
[22] g_closure_invoke 
[23] g_signal_emit_valist 
[24] g_signal_emit 
[25] gtk_propagate_event 
[26] gtk_main_do_event 
[27] g_main_context_dispatch 
[28] g_main_loop_run 
[29] gtk_main 
[30] wxGUIEventLoop::DoRun() 
[31] wxEventLoopBase::Run() 
[32] wxAppConsoleBase::MainLoop() 
[33] wxEntry(int&, wchar_t**) 
[34] __libc_start_main 

回答

0

我有同樣的問題,我找到一個解決方案(對於Linux)。

使用下面的命令行:

sudo ssh -N -L 1234:yourrdsendpointname.us-east-1.rds.amazonaws.com:5432 [email protected] -i yourkeyfile.pem 

在這個例子中是一個本地端口(在本地主機可用),yourrdsendpointname.us-east-1.rds.amazonaws.com是您的RDS數據庫在aws中的終點,ec2-user是ec2實例的默認用戶,它有權連接到rds數據庫,56.78.123.45是ec2實例的公有ip,yourkeyfile.pem i是您訪問ec2實例的關鍵。

當您運行此命令時,您可以使用pgAdmin或psql命令(請注意,此命令應該在終端中運行以保持隧道打開)訪問本地主機和端口1234中的數據庫。

欲瞭解更多的解釋,你可以去這裏。

https://medium.com/@michalisantoniou6/connect-to-an-aws-rds-using-an-ssh-tunnel-22f3bd597924

+0

我張貼有關錯誤的詳細信息與RDS實例了。 –

+0

@FrancisRodrigues首先讓我們在本地機器上轉發數據庫RDS。首先嚐試: ** sudo ssh -N -L 6969:ENDPOINTNAMERDS:5432 USER @ [PUBLIC_IP_EC2] -i KEYFILE。pem ** (5432是AWS中的RDS數據庫的端口,6969是您計算機上的一個偶然端口) 保持此命令的運行過程(如果沒問題,您將看不到輸出)。 之後,你肩並肩連接數據庫,使用主機名:**本地主機**和端口** 6969 **(命令SSH應該運行,沒有輸出) –

+0

我明白了,但我收到了一個'超時「在PgAdmin3和Linux控制檯中的答案我有空輸出。 –

0

@Nielson我嘗試使用SSH隧道Linux控制檯連接。

5433是我的機器

$ sudo lsof -i :5433

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME pgadmin3 1329 paneladm 15u IPv4 1534908 0t0 TCP debian:56894->ec2-[MY_IP].[ZONE].compute.amazonaws.com:5433 (SYN_SENT)

及以下終端是空的Postgres的本地端口。

在PgAdmin3中也沒有連接。

我還不知道如何與RDS建立外部連接,因爲默認組已允許外部連接。

enter image description here

參考文獻:

AWS RDS - Connecting to a DB Instance Running the PostgreSQL Database Engine

SSH tunneling. "bind Address already in use"