PID de reenvío de puerto SSH dentro de Docker no disponible

PID de reenvío de puerto SSH dentro de Docker no disponible

Tengo 2 maquinas. Están mi máquina y una máquina que ejecuta el contenedor SSH Docker. Algún servicio se está ejecutando en mi máquina en un puerto específico y estoy reenviando el puerto al contenedor SSHD. Luego estoy intentando finalizar el reenvío (y la conexión SSH en sí).

Al reenviar puertos a la segunda máquina directamente (conectándome a SSHD normal, no acoplado), puedo ubicar el PID del reenvío y, por lo tanto, eliminarlo.

ssh -N -R 20030:127.0.0.1:20000 [email protected] -p 22 -v

netstatacercarse

root@host /home/username # netstat -antlp | grep 20030
tcp 0 0 127.0.0.1:20030 0.0.0.0:* LISTEN 5918/sshd: username
tcp6 0 0 ::1:20030 :::* LISTEN 5918/sshd: username
root@host /home/username # kill -9 5918

lsofacercarse

root@host /home/username # lsof -n | grep 20030
sshd 6866 username 9u IPv6 1070467 0t0 TCP [::1]:20030 (LISTEN)
sshd 6866 username 10u IPv4 1070468 0t0 TCP 127.0.0.1:20030 (LISTEN)
root@host /home/username # kill -9 6866

El reenvío finaliza y la conexión SSH también, ya que solicité el reenvío solo con -Nla opción SSH.

Sin embargo, cuando se utiliza SSHD dentro del contenedor Docker, la situación no es tan sencilla.

Digamos que el SSHD del contenedor se ejecuta en el puerto 2222. Estoy reenviando puertos.

ssh -N -R 20030:127.0.0.1:20000 [email protected] -p 2222 -v

Luego entro al contenedor e intento los mismos enfoques que antes.

netstatacercarse

root@f9702d3087f0:/# netstat -antlp | grep 20030
tcp 0 0 0.0.0.0:20030 0.0.0.0:* LISTEN -
tcp6 0 0 :::20030 :::* LISTEN -

lsofacercarse

root@f9702d3087f0:/# lsof -n | grep 20030
root@f9702d3087f0:/#

Tenga en cuenta que ahora no puedo localizar el PID del reenvío. ¿En qué se diferencia el contenedor Docker de conectarse directamente al host y qué se puede hacer para eliminar el reenvío en el lado SSHD? No estoy interesado en hacerlo del lado del cliente.

Respuesta1

Ejecute el contenedor con esta opción:docker run [...] --cap-add=SYS_PTRACE

Cuando utilice Docker Compose, agregue esto a la definición de su contenedor:

    cap_add:
        - SYS_PTRACE

¿Qué hace? De la documentación de Docker:

SYS_PTRACE Rastree procesos arbitrarios usando ptrace(2).

información relacionada