我從本機主機透過 ssh 隧道將某些遠端主機:連接埠連接到我的本機主機:端口,因此遠端主機上的任何人都可以使用其「本機」連接埠透過該隧道存取我的連接埠。
為此,我在兩台主機上使用一些常規(非根)使用者帳戶。
例如:從我的本機使用tunnelingdaemon連接tunnelingdaemon@remotehost ssh -R 127.0.0.1:2222:127.0.0.1:22 remotehost ...
,並開啟遠端主機上的連接埠2222,並將其連接到本機上的連接埠22。
遠端主機上的 root 可以使用netstat
、lsof
、 或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'