В настоящее время у меня есть сценарий 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
так что сервер работает и доступен.
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 и попробовал все оттуда:
netstat
нужны рут праваlsof
не работает (я понятия не имею, что не так на сервере ... на моей машине все работает нормально)pg_lsclusters
похоже не устанавливаетсяЕсли вы можете подключиться к 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 прослушивал либо '*', либо определенный интерфейс на сервере.