Por que um cliente gráfico PGSQL pode se conectar através do túnel SSH e não de mim?

2

Eu tenho um servidor PostgreSQL que permite apenas conexões locais.

Estou usando o "Navicat for PostgreSQL Lite" para fazer algumas operações administrativas. Neste cliente, configurei um túnel SSH para o meu servidor. Tudo funciona bem.

Hoje, eu queria usar outro cliente que não me permite configurar o túnel SSH dentro dele. Então, eu tentei abrir um túnel SSH manualmente:

ssh -L 15021:myserver.com:5432 [email protected]

Mas quando tentei usá-lo com o cliente, ele diz que a conexão foi recusada. No prompt do SSH, recebi esta mensagem.

channel 3: open failed: connect failed: Connection refused

Eu tentei

psql -h localhost -p 15021 db_name

Mesmo erro ...

Eu não entendo o que a Navicat faz com coisas mágicas que eu não faço com o manual SSH Tunneling. Tenho certeza de que o PostgreSQL escuta na porta 5432.

Obrigado por qualquer ponteiro ou resposta.

EDITAR:

Este é um log de tentativa com LogLevel DEBUG . Eu anonimizei o nome do host.

Sep 13 14:57:23 myserver sshd[27793]: debug1: server_input_channel_open: ctype direct-tcpip rchan 3 win 2097152 max 32768
Sep 13 14:57:23 myserver sshd[27793]: debug1: server_request_direct_tcpip: originator ::1 port 64027, target myserver.com port 5432
Sep 13 14:57:23 myserver sshd[27793]: debug1: connect_next: host myserver.com ([xxx.xx.xx.xxx]:5432) in progress, fd=9
Sep 13 14:57:23 myserver sshd[27793]: debug1: channel 1: new [direct-tcpip]
Sep 13 14:57:23 myserver sshd[27793]: debug1: server_input_channel_open: confirm direct-tcpip
Sep 13 14:57:23 myserver sshd[27793]: debug1: channel 1: connection failed: Connection refused
Sep 13 14:57:23 myserver sshd[27793]: error: connect_to myserver.com port 5432: failed.
Sep 13 14:57:23 myserver sshd[27793]: debug1: channel 1: free: direct-tcpip, nchannels 2
    
por Kaltezar 13.09.2013 / 11:40

1 resposta

1

ssh -L 15021:myserver.com:5432 [email protected]

Essa não é a maneira típica de configurar um túnel, porque ele está pedindo ao servidor SSH remoto para se conectar ao PostgreSQL através de seu endereço IP público ( myserver.com )

Isso leva a Connection refused porque o postgres não escuta em seu endereço público. Esse é o caso normal e padrão.

Você provavelmente quis fazer:

 ssh -L 15021:localhost:5432 [email protected]

Nesse caso, o SSH roteará as conexões do banco de dados de seu localhost:15021 para o localhost:5432 do host remoto , que é presumivelmente onde o banco de dados está esperando conexões .

    
por 19.09.2013 / 06:02