Назад | Перейти на главную страницу

Как я могу определить порт PostgreSQL без рута и заставить его слушать порт?

В настоящее время у меня есть сценарий Python, которому необходимо получить некоторые данные из базы данных PostgreSQL. В настоящее время он работает нормально, но мне нужно перенести скрипт на другой сервер B. База данных PostgreSQL останется на сервере A.

Итак, моему скрипту Python необходим доступ к базе данных PostgreSQL с сервера. B подключение к серверу A.

Я пробовал добавить host=servera.my.url.de но это дало мне

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?

Сервер есть?

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

так что сервер работает и доступен.

Проблема в моем скрипте Python?

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?

и

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?

Портскан

$ 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

Интересно, что freeciv работает ...

Когда я увеличиваю диапазон портов, я получаю другие результаты:

$ 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

Может ли порт 5025 быть PostgreSQL?

Другие попытки

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

В PostgreSQL я набрал SHOW port, но он ничего не вернул. Означает ли это, что PostgreSQL не прослушивает ни один порт? Как мне заставить его слушать?

Это какая-то настройка в /path/pgsql/data? (На данный момент я не могу получить к этому доступ, но могу спросить.)

Что я могу сделать, чтобы выяснить, какой порт прослушивает postgreSql (или прослушивает ли он вообще)? Как я могу заставить его слушать порт (или изменить порт)? У меня нет прав root на этом компьютере, но я могу войти в систему с помощью SSH на сервере A.

Я видел Определение порта PostgreSQL и попробовал все оттуда:

Если вы можете подключиться к PostgreSQL с исходного компьютера, вы можете увидеть, какой порт он прослушивает:

SHOW port;

и какой адрес (а):

SHOW listen_addresses;

Предположительно я бы сказал listen_addresses будет localhost, поэтому он не принимает TCP / IP-соединения от внешних сетевых интерфейсов.

Чтобы подтвердить, что PostgreSQL прослушивает при использовании:

netstat -ltnp 

Другой вариант - сетевой брандмауэр на хосте базы данных, который не позволяет вам подключиться. tcptraceroute в порт с удаленного хоста, посмотрите, каков результат.

Во-первых, нет никакой уверенности, что именно freeciv слушает 5555. Nmap использует файл с именем nmap-services в котором перечислены общие приложения для каждого порта (если порт зарегистрирован в IANA, обычно это будет то приложение, которое было зарегистрировано для этого порта). Но, как вы заметили, вполне возможно использовать другой порт для любой службы ...

Если вы запустите nmap с опцией -sV, он фактически будет разговаривать с портом и пробовать другой протокол, чтобы узнать, какой из них соответствует. Это, конечно, займет немного больше времени, чем запуск с sT, и может вызвать срабатывание сигнализации обнаружения вторжения, если таковая имеется.

В этом конкретном случае я бы сделал ставку на то, что используется порт 5555 - потому что маловероятно, что на сервере базы данных будет работать freeciv, а люди обычно используют такой номер порта, как 5555, 3333, 6666 и т. Д. на вашем месте я бы начал с pgsql -p 5555 и если это не сработает, сделайте nmap -sV чтобы узнать, какой из других портов это.

(Конечно, по сути, это не техническая проблема, а социальная. Администратор БД должен сказать вам, какой порт использовать; если нет, ваш босс должен заставить их сделать это. Но у меня тоже есть был в местах, где Nmap и быстрее, и надежнее ...)

lsof работает только с процессами, запущенными пользователем (root может видеть все), поэтому он не показывает порты для postgresql.

Порт по умолчанию для postgresql - 5432, но поскольку show port ничего не показывает в вашем случае, я предполагаю, что listen_address установлен в postgresql.conf следующим образом:

listen_address = ''

или демон работает "-c ''"

Вам необходимо изменить конфигурацию, чтобы listen_address прослушивал либо '*', либо определенный интерфейс на сервере.