2017-05-08 156 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"