2017-05-15 54 views
0

我正在运行一个服务器(Ubuntu Server 14.04),它允许客户端从其设备(Raspberry Pi)创建ssh隧道,以便他们可以从其服务器访问其Web服务器互联网(作为穿越NAT的手段)。我可以使用ps -u username(该用户只运行sshd来转发端口)获得用户拥有的进程列表(所有设备都相同),但我无法通过他们转发的端口来过滤这些进程。所以问题是,我如何获得转发端口#N的sshd的pid?SSH服务器 - 获取sshd进程转发端口的pid #N

回答

2

你可以使用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

+1

很好的答案。仅供参考此命令也适用于Mac OS X。 – hmedia1

+0

很棒!我可以做'sudo lsof -Pan -i4 -c sshd -u domopro | grep: | awk {'print $ 2'}'并且只获得PID,这正是我需要使这个过程自动化的。谢谢 ;) –