我正在运行一个服务器 (Ubuntu Server 14.04),它允许客户端从他们的设备 (Raspberry Pi) 创建一个 ssh 隧道,这样他们就可以从互联网访问他们的网络服务器(作为穿越 NAT 的一种方式)。我可以使用 ps -u username
(该用户只运行 sshd 来转发端口)获取用户拥有的进程列表(所有设备都相同),但我无法过滤这些进程由他们转发的端口。所以问题是,我怎样才能得到转发端口#N 的 sshd 的 pid?
最佳答案
您可以使用 lsof
命令,因为在 Linux 上一切都是文件。
类似于 lsof -Pan -i | grep :PORT
会得到你所要求的。当我在我的机器上为端口 80 运行它时,它有这样的输出:
Command PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 1104 root 6u IPv4 23348 0t0 TCP *:80 (LISTEN)
nginx 1105 www-data 6u IPv4 23348 0t0 TCP *:80 (LISTEN)
nginx 1106 www-data 6u IPv4 23348 0t0 TCP *:80 (LISTEN)
nginx 1107 www-data 6u IPv4 23348 0t0 TCP *:80 (LISTEN)
nginx 1108 www-data 6u IPv4 23348 0t0 TCP *:80 (LISTEN)
可以找到关于 lsof
的更多信息 here
关于linux - SSH 服务器 - 获取 sshd 进程转发端口 #N 的 pid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43989022/