如何在AWS PostgreSQL数据库中连接pgAdmin3?

时间:2017-05-08 20:42:55

标签: postgresql amazon-web-services ssh amazon-ec2 pgadmin

我无法通过本地计算机与AWS postgres远程连接。

我绝对不会在AWS服务器上连接到postgres远程。

我已经关注了另一个主题,但我仍然混淆为什么不连接任何地方?

在我的远程服务器中,我遵循以下3个步骤:

1)我将远程数据库的端口更改为5434

2)在postgresql.conf文件中,我将“*”设置为listen_addresses标志。

pg_hba.conf文件中,我设置了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]

我没有成功访问AWS RDBMS的远程postgres。我按照以下说明操作:http://imperialwicket.com/aws-install-postgresql-90-on-amazon-linux

截图:

我遵循以下所有主题:

enter image description here

我将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

2 个答案:

答案 0 :(得分:0)

我有同样的问题,我找到了解决方案(对于Linux)。

使用以下命令行:

sudo ssh -N -L 1234:yourrdsendpointname.us-east-1.rds.amazonaws.com:5432 ec2-user@56.78.123.45 -i yourkeyfile.pem

在此示例中, 1234 是本地端口(在本地主机中可用), yourrdsendpointname.us-east-1.rds.amazonaws.com 是结束点你的RDS数据库在aws中, ec2-user 是ec2实例的默认用户,有权连接到rds数据库, 56.78.123.45 是ec2的公共ip实例和 yourkeyfile.pem 是访问ec2实例的关键。

运行此命令时,可以使用pgAdmin或psql命令访问本地主机和端口1234中的数据库(请注意,此命令应该在终端中运行以保持隧道打开)。

要了解更多解释,请访问此处。

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

答案 1 :(得分:0)

@Nielson我尝试使用SSH隧道连接Linux控制台。

5433是我机器的postgres本地端口

$ 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)

终端下面是空的。

在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"