Utilizo muchos túneles SSH a varios servidores en mi máquina Linux (para hacer túneles a bases de datos, servidores web, etc.) y sería realmente útil ver una lista de túneles abiertos actuales a través de un script de shell.
Puedo identificar conexiones locales a través de un grep en netstat a lo largo de las líneas de:
netstat -n --protocol inet | grep ':22'
pero esto no me mostrará el puerto remoto al que está conectado (y obviamente incluye conexiones SSH estándar que no están en túnel)
ACTUALIZACIÓN : Las respuestas están bien, pero no me muestran el puerto remoto al que estoy conectado. Por ejemplo, a menudo tengo un túnel a través de mysql, digamos localhost: 3308 mapeado a: 3306 en el servidor. Normalmente puedo adivinar por los puertos locales que he elegido, pero sería bueno tener acceso a ambos.
¿Algunas ideas?
fuente
Respuestas:
si solo desea enumerar túneles creados por
ssh
:(eso sería un -L 9090: localhost: túnel 80)
si desea ver los túneles / conexiones realizadas a
sshd
:el ssh-daemon escucha en el puerto 22 (última línea), se generan 2 subprocesos (primeras 2 líneas, inicio de sesión de 'usuario'), un túnel -R creado en el puerto 5000 y un túnel -L que reenvía un puerto desde mi ( máquina local) a localhost: 80 (www).
fuente
Pruebe este comando, puede ser útil:
fuente
no es exactamente la solución para su problema, pero a veces también es útil:
Desde una sesión ssh:
le muestra una lista de todas las conexiones abiertas sobre sus túneles para esa sesión.
fuente
EDITAR: ejemplo para el comentario de @akira:
Que se puede leer como: SSH (no SSHd) está escuchando el puerto TCP local 1443.
fuente
-p
muestra solo sus propios procesos (todos los procesos por raíz). Además, ese comandosshd
también se muestra .-l
-R
túneles si no está en uso. Pero bien, si está en uso, se puede tomar sin el-l
Este es el principal resultado de Google para esta pregunta, por lo que pondré mi respuesta aquí. Me quedé despierto toda la noche filtrando los resultados y se me ocurrió un comando largo y complejo que solo muestra los túneles ssh inversos en este formato:
publicipaddress: remoteforwardport
Aquí está el código, estoy ejecutando Ubuntu Server 12. Estoy ejecutando túneles ssh inversos que reenvían el puerto local 5900 a mi servidor ssh público, y este comando ingenioso muestra todas mis direcciones IP públicas con el puerto remoto.
fuente
Salida de muestra:
fuente
fuente
fuente
Como no me gusta lsof, sugiero un método alternativo (otro chico me enseñó :)):
$ netstat -l | grep ssh
De esta manera, muestra los túneles ssh creados por ellos
ssh
que se abren en el modo ESCUCHAR (y se omiten de forma predeterminadanetstat
).fuente