Ich habe 2 Maschinen. Das ist meine Maschine und eine Maschine, auf der ein SSH-Docker-Container läuft. Auf meiner Maschine läuft ein Dienst auf einem angegebenen Port und ich führe eine Portweiterleitung zum SSHD-Container durch. Dann versuche ich, die Weiterleitung (und die SSH-Verbindung selbst) zu beenden.
Wenn ich die Portweiterleitung direkt an die zweite Maschine durchführe (Verbindung zu einer normalen, nicht angedockten SSHD), kann ich die PID der Weiterleitung lokalisieren und sie somit beenden.
ssh -N -R 20030:127.0.0.1:20000 [email protected] -p 22 -v
netstat
Ansatz
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
Ansatz
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
Die Weiterleitung und die SSH-Verbindung wurden beendet, da ich die Weiterleitung nur mit der SSH- -N
Option angefordert hatte.
Bei der Verwendung von SSHD in einem Docker-Container ist die Situation jedoch nicht so einfach.
Nehmen wir an, die SSHD des Containers läuft auf Port 2222. Ich führe eine Portweiterleitung durch.
ssh -N -R 20030:127.0.0.1:20000 [email protected] -p 2222 -v
Dann betrete ich den Container und versuche die gleichen Ansätze wie zuvor.
netstat
Ansatz
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
Ansatz
root@f9702d3087f0:/# lsof -n | grep 20030
root@f9702d3087f0:/#
Bitte beachten Sie, dass ich die PID der Weiterleitung derzeit nicht finden kann. Wie unterscheidet sich der Docker-Container von einer direkten Verbindung zum Host und was kann getan werden, um die Weiterleitung auf der SSHD-Seite zu beenden? Ich bin nicht daran interessiert, dies auf der Clientseite zu tun.
Antwort1
Führen Sie den Container mit dieser Option aus:docker run [...] --cap-add=SYS_PTRACE
Wenn Sie Docker Compose verwenden, fügen Sie Folgendes zur Definition Ihres Containers hinzu:
cap_add:
- SYS_PTRACE
Was macht es? Aus der Docker-Dokumentation:
SYS_PTRACE Verfolgen Sie beliebige Prozesse mit ptrace(2).