일반 사용자로 열린 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'

관련 정보