Segmentação eficiente de um túnel SSH específico de todos os atuais?

2

Assumindo que eu fiz o login com o OpenSSH na porta 22 e também tunelou as portas 3306 e 80.

A porta 80 foi a última a ser tunelada de todas as três (22, 3306, 80):

$ sudo ssh UWU@IP -L 80:localhost:80

Como posso matar apenas o processo de tunelamento da porta 80?

Eu acredito que a melhor maneira seria direcionar automaticamente o túnel da porta 80 de alguma forma. Uma alternativa é atingir o último dos 3 túneis.

Por que eu pergunto isso:

Eu posso fazer ps aux | grep ssh , encontrar o processo e depois matá-lo especificamente, mas não é automático.

    
por JohnDoea 24.12.2016 / 23:13

4 respostas

4

Sugiro segmentar o PID do processo relevante com uma sintaxe $! .

Estágio 1: inicie o processo, mas desta vez com uma variável que contenha um valor de PID arbitrário:

sudo ssh blah@blah 80:localhost:80 & arbpid=$!

Estágio 2: Se a variável arbpid for salva apenas ao criar o encapsulamento, você poderá usá-lo para direcionar a eliminação do processo no final do seu script:

kill $arbpid

Em outras palavras, o que fizemos aqui foi marcar o túnel ssh com uma marca arbitrária (que é uma variável e seu valor) e usamos isso para atacar a matança.

Observe que há um único e comercial entre o comando e a variável. Assim como nos eus únicos após os comandos Unix, isso é fazer com que o comando antes do E comercial seja executado em um subprocesso diferente (segundo plano) enquanto o segundo comando (criando a variável nesse caso) será executado no processo atual (primeiro plano). / p>     

por 25.12.2016 / 00:32
3

Se você conhece uma string única na linha de comando, você pode usar pkill :

pkill -f "80:localhost:80"

O sinalizador -f faz com que pkill pesquise toda a linha de comando; sem esse sinalizador, ele apenas matará correspondências por nome de processo, ignorando argumentos.

    
por 25.12.2016 / 11:49
1

O processo que fornece o encapsulamento é o processo de escuta na porta 80, então use lsof ou netstat ou ss para descobrir isso.

lsof -n -i TCP:80 -sTCP:LISTEN -Fp |sed 's/^p//'
netstat -ntlp | awk '$4 ~ /:80$/ {sub(/\/.*/, "", $7); print $7}'
ss -nlpt 'sport = :80' | awk 'NR>1 {split($6, a, ","); print a[2]}'

Observe que, se você usar multiplexação de conexão, isso eliminará todas as conexões fornecidas pelo mesmo processo. Se você estiver usando multiplexação, poderá informar ao processo mestre para parar o encaminhamento com o comando cancel control.

ssh UWU@IP -S … -O cancel -L 80:localhost:80
    
por 25.12.2016 / 01:26
-3

Isso pode usar você para matar o último processo de tunelamento SSH:

kill $(history | grep ssh | tail -n 2 | head -n 1| cut -d' ' -f 2)
    
por 24.12.2016 / 23:32