以普通使用者身分尋找開啟的 tcp 連接埠的 pid

以普通使用者身分尋找開啟的 tcp 連接埠的 pid

我從本機主機透過 ssh 隧道將某些遠端主機:連接埠連接到我的本機主機:端口,因此遠端主機上的任何人都可以使用其「本機」連接埠透過該隧道存取我的連接埠。

為此,我在兩台主機上使用一些常規(非根)使用者帳戶。

例如:從我的本機使用tunnelingdaemon連接tunnelingdaemon@remotehost ssh -R 127.0.0.1:2222:127.0.0.1:22 remotehost ...,並開啟遠端主機上的連接埠2222,並將其連接到本機上的連接埠22。

遠端主機上的 root 可以使用netstatlsof、 或fuser來尋找開啟並透過隧道傳輸該連接埠 2222 的進程的 PID。

例如

根:

root@remote_host:/# fuser 2222/tcp
2222/tcp:            13709
root@remote_host:/#

隧道守護程式:

tunnelingdaemon@remote_host:/$ fuser 2222/tcp
tunnelingdaemon@remote_host:/$

在遠端主機上,我可以作為普通(tunnelingdaemon)用戶殺死該進程在它下面首先打開了隧道,但是我必須是 root 才能找到我應該殺死哪個進程

這是一個問題。我需要為此找到解決方案。

答案1

例如連接埠“8889”:

lsof -i -P | grep 8889

對我有用。

然後你可以殺死PID(輸出的第二列)

答案2

ss也許嘗試-p開關?您無需提升到root即可執行此命令。

man ss

   -p, --processes
          Show process using socket.

例子:

ss -p | grep dropbox
u_str  ESTAB      0      0       * 25994                 * 25995                 users:(("dropbox",pid=1869,fd=22))

答案3

你可以寫一個PID檔:

ssh ... 'echo $(/bin/ps -p $$ -o ppid --no-headers) >~/ssh.pid; read cont'

相關內容