Como matar a sessão SSH que foi iniciada com a opção -f (executada em segundo plano)

35

Estou bem perdido com isso. Na página do manual:

 -f      Requests ssh to go to background just before command execution.

Depois de iniciar o SSH com a opção -f , tenho um túnel de trabalho. Mas depois que eu termino de usá-lo, não sei mais como interagir com ele. Por exemplo, não consigo fechar o túnel SSH quando termino com ele.

Os métodos usuais que conheço não funcionam. Por exemplo, jobs não retorna nada. O comando ~ não é reconhecido (e eu não sei exatamente como usá-lo, de qualquer forma).

No entanto, pgrep me diz que o túnel SSH ainda está em execução (após eu ter fechado o terminal, etc.). Como eu interajo com isso? Como faço para fechar?

    
por MountainX 21.07.2013 / 06:03

4 respostas

27

Encontrei a solução aqui: link

A melhor maneira - Túneis que fecham automaticamente

Como foi mencionado anteriormente, em vez de usar a combinação do comutador -fN, podemos usar apenas -f, mas também executar um comando na máquina remota. Mas, qual comando deve ser executado, já que só precisamos inicializar um túnel?

É quando o sono pode ser o comando mais útil de todos! Nesta situação particular, o sono tem duas vantagens:

  • não faz nada, portanto, nenhum recurso é consumido
  • o usuário pode especificar por quanto tempo será executado

Como isso ajuda a fechar automaticamente o túnel ssh é explicado abaixo.

Iniciamos a sessão ssh em segundo plano, enquanto executamos o comando sleep por 10 segundos na máquina remota. O número de segundos não é crucial. Ao mesmo tempo, executamos o vncviewer exatamente como antes:

[me@local]$ ssh -f -L 25901:127.0.0.1:5901 [email protected] sleep 10; \
          vncviewer 127.0.0.1:25901:1

Nesse caso, o cliente ssh é instruído a bifurcar a sessão ssh no plano de fundo (-f), criar o encapsulamento (-L 25901: 127.0.0.1: 5901) e executar o comando sleep no servidor remoto por 10 segundos. segundos (dormir 10).

A diferença entre este método e o anterior (switch -N), basicamente, é que, neste caso, o objetivo principal do cliente ssh não é criar o encapsulamento, mas sim executar o comando sleep por 10 segundos. A criação do túnel é algum tipo de efeito colateral, um objetivo secundário. Se o vncviewer não fosse usado, o cliente ssh sairia após o período de 10 segundos, já que não teria mais tarefas a fazer, destruindo o túnel ao mesmo tempo.

Durante a execução do comando sleep, se houver outro processo, o vncviewer, neste caso, começa a usar esse túnel e o mantém ocupado além do período de 10 segundos, mesmo que o cliente ssh termine seu trabalho remoto (execução do sono) , não pode sair porque outro processo ocupa o túnel. Em outras palavras, o cliente ssh não pode destruir o túnel porque ele teria que matar o vncviewer também. Quando o vncviewer pára de usar o encapsulamento, o cliente ssh também sai, já que ele já atingiu seu objetivo.

Dessa forma, nenhum processo ssh é executado em segundo plano.

    
por 21.07.2013 / 06:59
48

Uma solução especialmente boa para o script é usar master mode , com um soquete para comandos de controle:

ssh -f -N -M -S <path-to-socket> -L <port>:<host>:<port> <server>

Para fechar novamente:

ssh -S <path-to-socket> -O exit <server>

Isso evita o uso de IDs de processo e problemas de tempo que podem estar associados a outras abordagens.

    
por 28.10.2014 / 19:17
5

Para eliminar o túnel, use ps -C ssh ou ps | grep ssh ou qualquer outra variante para determinar qual processo ssh está executando o seu túnel. Então mate-o.

Como alternativa, você pode procurar o processo determinando qual deles tem essa porta aberta:

netstat -lnpt | awk '$4 ~ /:1234$/ {sub(/\/.*/, "", $7); print $7}'

Se você quiser matar todos os clientes ssh em execução na sua máquina (como usuário), pkill ssh fará isso.

    
por 22.07.2013 / 01:49
3

Como foi respondido por outros aqui, pkill ssh o mata.

Para criar um túnel que possa ser recuperado, inicio em screen sem a opção -f e, em seguida, desanexe a tela com Ctrl-A D . Para trazer de volta o túnel, chame screen -r .

    
por 05.11.2017 / 07:22