Eu tenho 2 máquinas. Aí está minha máquina e uma máquina executando o contêiner SSH Docker. Algum serviço está sendo executado na minha máquina em uma porta especificada e estou encaminhando a porta para o contêiner SSHD. Então estou tentando encerrar o encaminhamento (e a própria conexão SSH).
Ao fazer o encaminhamento de porta diretamente para a segunda máquina (conectando-se ao SSHD normal, não dockerizado), consigo localizar o PID do encaminhamento e, portanto, eliminá-lo.
ssh -N -R 20030:127.0.0.1:20000 [email protected] -p 22 -v
netstat
abordagem
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
abordagem
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
O encaminhamento foi encerrado e a conexão SSH também, pois solicitei o encaminhamento apenas com -N
a opção SSH.
No entanto, ao usar SSHD dentro do contêiner Docker, a situação não é tão simples.
Digamos que o SSHD do contêiner seja executado na porta 2222. Estou encaminhando a porta.
ssh -N -R 20030:127.0.0.1:20000 [email protected] -p 2222 -v
Então entro no contêiner e tento as mesmas abordagens de antes.
netstat
abordagem
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
abordagem
root@f9702d3087f0:/# lsof -n | grep 20030
root@f9702d3087f0:/#
Observe que não consigo localizar o PID do encaminhamento agora. Como o contêiner Docker é diferente de conectar-se diretamente ao host e o que pode ser feito para eliminar o encaminhamento no lado SSHD? Não estou interessado em fazer isso no lado do cliente.
Responder1
Execute o contêiner com esta opção:docker run [...] --cap-add=SYS_PTRACE
Ao usar o Docker Compose, adicione isto à definição do seu contêiner:
cap_add:
- SYS_PTRACE
O que isso faz? Da documentação do Docker:
SYS_PTRACE Rastreie processos arbitrários usando ptrace(2).