encuentre el pid del puerto tcp abierto, como usuario normal

encuentre el pid del puerto tcp abierto, como usuario normal

Desde el host local estoy haciendo un túnel ssh desde un host remoto: puerto a mi host local: puerto, de modo que cualquiera en un host remoto pueda usar su puerto "local" para acceder a mi puerto a través de ese túnel.

Estoy usando una cuenta de usuario normal (no root) en ambos hosts para esto.

Por ejemplo: Tunnelingdaemon desde mi host local, conecte Tunnelingdaemon@remotehost usando ssh -R 127.0.0.1:2222:127.0.0.1:22 remotehost ...y abra el puerto 2222 en el host remoto y conéctelo al puerto 22 en mi host local.

La raíz en el host remoto puede usar netstat, lsofo fuserpara encontrar el PID de un proceso que abrió y tunelizó ese puerto 2222. Pero el usuario normal (tunnelingdaemon) no puede hacer eso.

Por ejemplo

raíz:

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

demonio de túnel:

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

En un host remoto,Puedo finalizar ese proceso como usuario normal (tunnelingdaemon)bajo el cual se abre un túnel en primer lugar, peroDebo ser root para encontrar qué proceso debo matar.

Eso es un problema. Necesito encontrar una solución para esto.

Respuesta1

Por ejemplo, puerto "8889":

lsof -i -P | grep 8889

funciona para mi.

Luego puedes eliminar el PID (segunda columna de la salida)

Respuesta2

¿Quizás probar sscon el -pinterruptor? No es necesario elevarse para rootejecutar este comando.

Deman ss

   -p, --processes
          Show process using socket.

Ejemplo:

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

Respuesta3

Podrías escribir un archivo PID:

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

información relacionada