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
netstat
acercarse
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
lsof
acercarse
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 -N
la 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.
netstat
acercarse
root@f9702d3087f0:/# netstat -antlp | grep 20030
tcp 0 0 0.0.0.0:20030 0.0.0.0:* LISTEN -
tcp6 0 0 :::20030 :::* LISTEN -
lsof
acercarse
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).