Como posso determinar a porta do PostgreSQL sem raiz e fazer com que ela ouça uma porta?

2

Atualmente, tenho um script Python que precisa buscar alguns dados de um banco de dados PostgreSQL. Atualmente funciona bem, mas tenho que mover o script para outro servidor B . O banco de dados PostgreSQL permanecerá no servidor A .

Portanto, meu script Python precisa acessar o banco de dados PostgreSQL do servidor B conectando ao servidor A .

Eu tentei adicionar host=servera.my.url.de , mas isso me deu

could not connect to server: Connection refused
       Is the server running on host "servera.my.url.de" (141.X.YZ.AB) and
       accepting TCP/IP connections on port 5432?

O servidor está lá?

ping servera.my.url.de
PING servera.my.url.de (141.X.YZ.AB) 56(84) bytes of data.
64 bytes from XXXXX (141.X.YZ.AB): icmp_req=1 ttl=58 time=3.76 ms
64 bytes from XXXXX (141.X.YZ.AB): icmp_req=2 ttl=58 time=4.07 ms
64 bytes from XXXXX (141.X.YZ.AB): icmp_req=3 ttl=58 time=5.01 ms
^C
--- servera.my.url.de ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2001ms
rtt min/avg/max/mdev = 3.768/4.287/5.014/0.529 ms

para que o servidor esteja em execução e acessível.

O meu script Python é o problema?

psql -h servera.my.url.de -p 5930 -c "select 1"
psql: could not connect to server: Connection refused
    Is the server running on host "servera.my.url.de" (141.X.YZ.AB) and accepting
    TCP/IP connections on port 5930?

e

psql -h servera.my.url.de -p 5932 -U myusername -W -c "select 1" 
Password for user myusername: 
psql: could not connect to server: Connection refused
    Is the server running on host "servera.my.url.de" (141.X.YZ.AB) and accepting
    TCP/IP connections on port 5932?

Portscan

$ nmap -p 5000-6000 -sT servera.my.url.de

Starting Nmap 6.00 ( http://nmap.org ) at 2014-02-05 10:40 CET
Nmap scan report for servera.my.url.de (141.X.YZ.AB)
Host is up (0.054s latency).
rDNS record for 141.X.YZ.AB: XXXXXX
Not shown: 992 closed ports
PORT     STATE    SERVICE
5000/tcp filtered upnp
5025/tcp filtered unknown
5190/tcp filtered aol
5222/tcp filtered xmpp-client
5554/tcp filtered sgi-esphttp
5555/tcp filtered freeciv
5900/tcp filtered vnc
5901/tcp filtered vnc-1
6000/tcp filtered X11

Interessante que o freeciv está rodando ...

Quando aumento o intervalo de portas, obtenho resultados diferentes:

$ nmap -p 1000-6000 -sT servera.my.url.de

Starting Nmap 6.00 ( http://nmap.org ) at 2014-02-05 10:40 CET
Nmap scan report for servera.my.url.de (141.X.YZ.AB)
Host is up (0.054s latency).
rDNS record for 141.X.YZ.AB: XXXXXX
Not shown: 4868 closed ports, 130 filtered ports
PORT     STATE SERVICE
3000/tcp open  ppp
4443/tcp open  pharos
4444/tcp open  krb524

A porta 5025 poderia ser o PostgreSQL?

Outras tentativas

$ ps aux | grep postgres | grep -v 'postgres:'
postgres 28928 0.0 0.0 90124 820 ? s 2013 0:59 /usr/lib/postgresql91/bin/postgres -D /path/pgsql/data
[my command]

$ lsof -p 28928
[does not return anything, but does not quit]

Dentro do PostgreSQL eu digitei SHOW port , mas não retornou nada. Isso significa que o PostgreSQL não está escutando nenhuma porta? Como posso ouvir?

É alguma configuração em /path/pgsql/data ? (Eu não posso acessar isso no momento, mas posso perguntar.)

O que posso fazer para descobrir em qual porta o postgreSql está escutando (ou se está escutando)? Como posso ouvir uma porta (ou mudar a porta)? Eu não tenho permissões de root nesta máquina, mas posso fazer o login com SSH no servidor A .

Eu vi Determinando a porta do PostgreSQL e tentei de tudo:

  • netstat precisa dos direitos de root
  • lsof não funciona (não tenho idéia do que está errado no servidor ... na minha máquina, funciona bem)
  • pg_lsclusters parece não estar instalado
por Martin Thoma 05.02.2014 / 10:57

3 respostas

4

Se você pode se conectar ao PostgreSQL a partir da máquina original, você pode ver em qual porta ele está escutando:

SHOW port;

e qual endereço (es):

SHOW listen_addresses;

Suponho que listen_addresses será localhost , por isso não está aceitando conexões TCP / IP de interfaces de rede externas.

Para confirmar o que o PostgreSQL está escutando em uso:

netstat -ltnp 

Outra possibilidade é um firewall de rede no host do banco de dados que não permite a conexão. tcptraceroute para a porta do host remoto, veja qual é o resultado.

    
por 05.02.2014 / 12:45
1

Primeiro, não é de todo certo que seja o freeciv que está escutando em 5555. O Nmap usa um arquivo chamado nmap-services que lista o aplicativo comum para cada porta (se a porta for registrada com IANA, geralmente registrado para essa porta). Mas é bem possível usar outra porta para qualquer serviço, como você percebeu ...

Se você executar o nmap com a opção -sV , ele realmente conversará com a porta e tentará um protocolo diferente para ver qual combina. Obviamente, isso levará um pouco mais do que executá-lo com sT e poderá acionar alarmes de detecção de intrusão, se houver algum.

Neste caso em particular, eu apostaria que a porta 5555 está sendo usada - porque é improvável que um servidor de banco de dados esteja executando o freeciv, e é comum que humanos usem um portnumer como 5555, 3333, 6666 Então, se eu fosse você, começaria fazendo pgsql -p 5555 e se isso não funcionasse, faça nmap -sV para descobrir qual das outras portas ela é.

(Claro que, na raiz, isso não é um problema técnico, mas social. Seu administrador do banco de dados deve informar qual porta usar; caso contrário, seu chefe deve fazê-lo. Mas eu, também tem estado em lugares onde o nmap é mais rápido e mais confiável ...)

    
por 05.02.2014 / 11:35
-1

lsof só funciona para processos que o usuário executando já iniciou (o root pode ver todos), é por isso que ele não mostra as portas para o postgresql.

A porta padrão para o postgresql é 5432, mas como show port não mostra nada no seu caso, eu acho que o listening_address está configurado assim no postgresql.conf:

listen_address = ''

ou o daemon está executando "-c ''"

Você precisa alterar a configuração para que listen_address ative ou '*' ou uma interface específica no servidor.

    
por 05.02.2014 / 11:12

Tags