我怎样才能在没有root的情况下确定PostgreSQL的端口并让它监听端口?

我怎样才能在没有root的情况下确定PostgreSQL的端口并让它监听端口?

我目前有一个 Python 脚本,需要从 PostgreSQL 数据库获取一些数据。它目前运行良好,但我必须将脚本移至另一台服务器B。PostgreSQL 数据库将保留在服务器上A

B因此我的 Python 脚本需要从连接到服务器的服务器访问 PostgreSQL 数据库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 的端口并从那里尝试了一切:

  • netstat需要root权限
  • lsof不工作(我不知道服务器上出了什么问题......在我的计算机上,它运行正常)
  • pg_lsclusters好像没有安装

答案1

如果您可以从原始机器连接到 PostgreSQL,您可以看到它正在监听的端口:

SHOW port;

以及地址:

SHOW listen_addresses;

我猜listen_addresses会是的localhost,所以它不接受来自外部网络接口的 TCP/IP 连接。

要确认 PostgreSQL 正在监听什么,请使用:

netstat -ltnp 

另一种可能性是数据库主机上的网络防火墙不允许您连接。tcptraceroute从远程主机连接到端口,看看结果是什么。

答案2

首先,完全不能确定监听 5555 的是不是 freeciv。Nmap 使用一个名为 的文件,nmap-services其中列出了每个端口的常用应用程序(如果该端口已在 IANA 注册,则通常是为该端口注册的应用程序)。但正如您所注意到的,完全有可能为任何服务使用另一个端口...

如果您使用选项 运行 nmap -sV,它实际上会与端口通信并尝试不同的协议以查看哪个协议匹配。这当然会比使用 运行花费更长的时间sT,并且可能会触发入侵检测警报(如果有)。

在这种特殊情况下,我敢打赌正在使用端口 5555 - 因为数据库服务器不太可能运行 freeciv,而且人们通常使用 5555、3333、6666 等端口号。所以如果我是你,我会先这样做,pgsql -p 5555如果那不起作用,再nmap -sV找出它是其他哪个端口。

(当然,从根本上来说这不是一个技术问题,而是一个社会问题。您的数据库管理员应该告诉您使用哪个端口;如果他们不这样做,您的老板应该让他们这样做。但我也曾去过 nmap 更快更可靠的地方……)

答案3

lsof 仅适用于运行它的用户启动的进程(root 可以看到全部),这就是它不显示 postgresql 端口的原因。

postgresql 的默认端口是 5432,但由于在您的情况下 show port 没有显示任何内容,我猜测 listening_address 在 postgresql.conf 中是这样设置的:

监听地址 = ''

或者守护进程正在运行“-c''”

您需要更改配置,以便 listen_address 监听“*”或服务器上的特定接口。

相关内容