Linux: 谁在监听 tcp 端口 22?
Linux: who is listening on tcp port 22?
我有一个 AST2600 评估板。开机后(连接 RJ45),它会启动到 OpenBMC 内核。从串行端口,使用 ip
命令我可以获得它的 IP 地址。在我的笔记本电脑上,我可以 ssh
使用帐户 root/0penBmc
:
进入看板
bruin@gen81:/$ ssh root@192.168.6.132
root@192.168.6.132's password:
那我想看看有哪些tcp端口是开放的。由于没有 ss
/lsof
/netstat
实用程序,我 cat /proc/net/tcp
:
root@AMIfa7ba648f62e:/proc/net# cat /proc/net/tcp
sl local_address rem_address st tx_queue rx_queue tr tm->when retrnsmt uid timeout inode
0: 00000000:14EB 00000000:0000 0A 00000000:00000000 00:00000000 00000000 997 0 9565 1 0c202562 100 0 0 10 0
1: 3500007F:0035 00000000:0000 0A 00000000:00000000 00:00000000 00000000 997 0 9571 1 963c8114 100 0 0 10 0
奇怪的是/proc/net/tcp
中没有列出tcp port 22,这表明没有进程在监听tcp port 22。如果是这样,ssh连接是如何建立的?
顺便说一句,正如使用 ps
测试的那样,处理 ssh 连接的是 dropbear
进程,并且 dropbear
是动态生成的(即,如果没有 ssh 连接,则不会这样的进程存在;如果我建立了两个 ssh 连接,就会产生两个 dropbear
进程。
PS:按照 John 在他的回复中的建议,我在图像中添加了 ss
实用程序,它显示了我的预期:
root@AMI8287361b9c6f:~# ss -antp
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 0 0.0.0.0:5355 0.0.0.0:* users:(("systemd-resolve",pid=239,fd=12))
LISTEN 0 0 127.0.0.1:5900 0.0.0.0:* users:(("obmc-ikvm",pid=314,fd=5))
LISTEN 0 0 127.0.0.53:53 0.0.0.0:* users:(("systemd-resolve",pid=239,fd=17))
LISTEN 0 0 *:443 *:* users:(("bmcweb",pid=325,fd=3),("systemd",pid=1,fd=41))
LISTEN 0 0 *:5355 *:* users:(("systemd-resolve",pid=239,fd=14))
LISTEN 0 0 *:5900 *:* users:(("obmc-ikvm",pid=314,fd=6))
LISTEN 0 0 *:22 *:* users:(("systemd",pid=1,fd=49))
LISTEN 0 0 *:2200 *:* users:(("systemd",pid=1,fd=50))
ESTAB 0 0 [::ffff:192.168.6.89]:22 [::ffff:192.168.6.98]:34906 users:(("dropbear",pid=485,fd=2),("dropbear",pid=485,fd=1),("dropbear",pid=485,fd=0),("systemd",pid=1,fd=20))
好问题。
首先,向图像添加常见的 tools/utitlies 是相当直接的。
可以通过添加一行
来添加(仅用于本地测试)
OBMC_IMAGE_EXTRA_INSTALL:append = " iproute2 iproute2-ss"
到 https://github.com/openbmc/openbmc/blob/master/meta-aspeed/conf/machine/evb-ast2600.conf 文件(或你自己的 testing/deveopment 图层)。添加有用的工具通常是值得的。
其次,如果您使用的是 ipv6,则需要检查 /proc/net/tcp6
第三,您还可以通过查找应用程序的 pid 来查找端口 ps | grep <application name>
。然后读取该 pid cat /proc/<pid>/net/tcp
使用的端口
最后,如果您还有其他问题或这些步骤不起作用。请通过 discord https://discord.com/invite/69Km47zH98 or Email https://lists.ozlabs.org/listinfo/openbmc 联系我们(他们是提问的首选地点)
我有一个 AST2600 评估板。开机后(连接 RJ45),它会启动到 OpenBMC 内核。从串行端口,使用 ip
命令我可以获得它的 IP 地址。在我的笔记本电脑上,我可以 ssh
使用帐户 root/0penBmc
:
bruin@gen81:/$ ssh root@192.168.6.132
root@192.168.6.132's password:
那我想看看有哪些tcp端口是开放的。由于没有 ss
/lsof
/netstat
实用程序,我 cat /proc/net/tcp
:
root@AMIfa7ba648f62e:/proc/net# cat /proc/net/tcp
sl local_address rem_address st tx_queue rx_queue tr tm->when retrnsmt uid timeout inode
0: 00000000:14EB 00000000:0000 0A 00000000:00000000 00:00000000 00000000 997 0 9565 1 0c202562 100 0 0 10 0
1: 3500007F:0035 00000000:0000 0A 00000000:00000000 00:00000000 00000000 997 0 9571 1 963c8114 100 0 0 10 0
奇怪的是/proc/net/tcp
中没有列出tcp port 22,这表明没有进程在监听tcp port 22。如果是这样,ssh连接是如何建立的?
顺便说一句,正如使用 ps
测试的那样,处理 ssh 连接的是 dropbear
进程,并且 dropbear
是动态生成的(即,如果没有 ssh 连接,则不会这样的进程存在;如果我建立了两个 ssh 连接,就会产生两个 dropbear
进程。
PS:按照 John 在他的回复中的建议,我在图像中添加了 ss
实用程序,它显示了我的预期:
root@AMI8287361b9c6f:~# ss -antp
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 0 0.0.0.0:5355 0.0.0.0:* users:(("systemd-resolve",pid=239,fd=12))
LISTEN 0 0 127.0.0.1:5900 0.0.0.0:* users:(("obmc-ikvm",pid=314,fd=5))
LISTEN 0 0 127.0.0.53:53 0.0.0.0:* users:(("systemd-resolve",pid=239,fd=17))
LISTEN 0 0 *:443 *:* users:(("bmcweb",pid=325,fd=3),("systemd",pid=1,fd=41))
LISTEN 0 0 *:5355 *:* users:(("systemd-resolve",pid=239,fd=14))
LISTEN 0 0 *:5900 *:* users:(("obmc-ikvm",pid=314,fd=6))
LISTEN 0 0 *:22 *:* users:(("systemd",pid=1,fd=49))
LISTEN 0 0 *:2200 *:* users:(("systemd",pid=1,fd=50))
ESTAB 0 0 [::ffff:192.168.6.89]:22 [::ffff:192.168.6.98]:34906 users:(("dropbear",pid=485,fd=2),("dropbear",pid=485,fd=1),("dropbear",pid=485,fd=0),("systemd",pid=1,fd=20))
好问题。
首先,向图像添加常见的 tools/utitlies 是相当直接的。 可以通过添加一行
来添加(仅用于本地测试)OBMC_IMAGE_EXTRA_INSTALL:append = " iproute2 iproute2-ss"
到 https://github.com/openbmc/openbmc/blob/master/meta-aspeed/conf/machine/evb-ast2600.conf 文件(或你自己的 testing/deveopment 图层)。添加有用的工具通常是值得的。
其次,如果您使用的是 ipv6,则需要检查 /proc/net/tcp6
第三,您还可以通过查找应用程序的 pid 来查找端口 ps | grep <application name>
。然后读取该 pid cat /proc/<pid>/net/tcp
最后,如果您还有其他问题或这些步骤不起作用。请通过 discord https://discord.com/invite/69Km47zH98 or Email https://lists.ozlabs.org/listinfo/openbmc 联系我们(他们是提问的首选地点)