PID переадресации порта SSH внутри Docker недоступен

PID переадресации порта SSH внутри Docker недоступен

У меня есть 2 машины. Есть моя машина и машина, на которой запущен контейнер SSH Docker. На моей машине запущена какая-то служба на указанном порту, и я делаю переадресацию портов на контейнер SSHD. Затем я пытаюсь завершить переадресацию (и само соединение SSH).

При выполнении переадресации портов на вторую машину напрямую (подключение к обычному, не подключенному к Docker SSHD) я могу найти PID переадресации и, следовательно, завершить ее.

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

netstatподход

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подход

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

Переадресация прекращена, как и SSH-соединение, поскольку я запросил переадресацию только с -Nопцией SSH.

Однако при использовании SSHD внутри Docker-контейнера ситуация не столь однозначна.

Допустим, SSHD контейнера работает на порту 2222. Я делаю переадресацию портов.

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

Затем я вхожу в контейнер и пробую те же подходы, что и раньше.

netstatподход

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подход

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

Обратите внимание, что я не могу сейчас найти PID пересылки. Чем контейнер Docker отличается от прямого подключения к хосту и что можно сделать, чтобы остановить пересылку на стороне SSHD? Мне не интересно делать это на стороне клиента.

решение1

Запустите контейнер с этой опцией:docker run [...] --cap-add=SYS_PTRACE

При использовании Docker Compose добавьте это в определение вашего контейнера:

    cap_add:
        - SYS_PTRACE

Что он делает? Из документации Docker:

SYS_PTRACE Трассировка произвольных процессов с помощью ptrace(2).

Связанный контент