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
, lsof
o fuser
para 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 ss
con el -p
interruptor? No es necesario elevarse para root
ejecutar 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'