¿Segmentación eficiente de un túnel SSH específico de todos los actuales?

Suponiendo que inicié session con OpenSSH en el puerto 22 y luego también tunelé los puertos 3306 y 80.

El puerto 80 fue el último en ser tunelizado de los tres (22, 3306, 80):

$ sudo ssh UWU@IP -L 80:localhost:80 

¿Cómo puedo matar solo el process de túnel del puerto 80?

Creo que la mejor manera sería atacar automáticamente el túnel del puerto 80 de alguna manera. Una alternativa es apuntar al último de los 3 túneles.

Por qué le pregunto esto:

Puedo hacer ps aux | grep ssh ps aux | grep ssh , encuentre el process y luego elimínelo específicamente, pero no es automático.

Solutions Collecting From Web of "¿Segmentación eficiente de un túnel SSH específico de todos los actuales?"

¡Sugeriría apuntar el PID del process relevante con $! syntax.

Etapa 1: inicia el process, pero esta vez con una variable que contiene un valor PID arbitrario:

 sudo ssh blah@blah 80:localhost:80 & arbpid=$! 

Etapa 2: si la variable arbpid solo se guarda al crear el túnel, puede usarla para atacar el process al final del guión:

 kill $arbpid 

En otras palabras, lo que hicimos aquí fue marcar el túnel ssh con una marca arbitraria (que es una variable y su valor) y lo usamos para apuntar a la matanza.


Tenga en count que hay un signo único entre el command y la variable. Al igual que con los ampersands individuales después de los commands de Unix, esto significa hacer que el command antes del signo & se ejecute en un subprocess diferente (background) mientras que el segundo command (crear la variable en este caso) se ejecutará en el process actual (primer plano).

Si conoce una cadena única en la línea de command, puede usar pkill :

 pkill -f "80:localhost:80" 

La bandera -f hace que pkill busque toda la línea de command; sin esa bandera, solo matará las coincidencias por nombre del process, ignorando los arguments.

El process que proporciona el túnel es el process que se escucha en el puerto 80, así que use lsof o netstat o ss para encontrarlo.

 lsof -n -i TCP:80 -sTCP:LISTEN -Fp |sed 's/^p//' netstat -ntlp | awk '$4 ~ /:80$/ {sub(/\/.*/, "", $7); print $7}' ss -nlpt 'sport = :80' | awk 'NR>1 {split($6, a, ","); print a[2]}' 

Tenga en count que si usa la multiplexación de connection, esto matará todas las conexiones proporcionadas por el mismo process. Si usa multiplexación, puede indicarle al process maestro que deje de reenviar con el command cancel control.

 ssh UWU@IP -S … -O cancel -L 80:localhost:80 

Esto podría usarlo para matar el último process de túnel SSH:

 kill $(history | grep ssh | tail -n 2 | head -n 1| cut -d' ' -f 2)