2017-05-15 88 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,這正是我需要使這個過程自動化的。謝謝 ;) –