일반 사용자로서 열린 TCP 포트의 pid를 찾으십시오.

일반 사용자로서 열린 TCP 포트의 pid를 찾으십시오.

로컬 호스트에서 일부 원격 호스트:포트를 로컬 호스트:포트로 SSH 터널링하고 있으므로 원격 호스트의 누구든지 "로컬" 포트를 사용하여 해당 터널을 통해 내 포트에 액세스할 수 있습니다.

이를 위해 두 호스트 모두에서 일반(루트가 아닌) 사용자 계정을 사용하고 있습니다.

예: 내 로컬 호스트의 Tunnelingdaemon은 Tunnelingdaemon@remotehost를 사용하여 연결 ssh -R 127.0.0.1:2222:127.0.0.1:22 remotehost ...하고 원격 호스트에서 포트 2222를 열고 이를 내 로컬 호스트의 포트 22에 연결합니다.

원격 호스트의 루트는 netstat, lsof또는 를 사용하여 fuser해당 포트 2222를 열고 터널링한 프로세스의 PID를 찾을 수 있습니다. 그러나 일반 사용자(tunnelingdaemon)는 그렇게 할 수 없습니다.

예를 들어

뿌리:

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

터널링데몬:

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

원격 호스트에서는일반(tunnelingdaemon) 사용자로서 해당 프로세스를 종료할 수 있습니다.그 아래에는 애초에 터널이 열렸지만어떤 프로세스를 종료해야 하는지 찾으려면 루트여야 합니다..

그게 문제야. 이에 대한 해결책을 찾아야 합니다.

답변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'

관련 정보