Como faço para remover uma porta encaminhada SSH


52

Eu costumava ssh -L 10002:192.168.0.30:10002 192.168.1.135estabelecer o encaminhamento de porta, mas agora preciso removê-lo.

Como eu faço isso?


Muitas vezes percebemos que a porta ainda está sendo encaminhada quando disparamos uma nova sessão ssh executando o mesmo comando novamente e recebendo Warning: remote port forwarding failed for listen portmensagem.
GabLeRoux

Respostas:


56

Se você estiver usando Linux, você pode matar o processo:

ps aux | grep ssh

e depois use

kill <id>

Para matar o processo.

Se o comando kill não for bem sucedido, você pode tentar

kill -9 <id>

31
Não. Não. Não. Por favor, por favor, não use kill -9até depois de tentar apenas kill. Muitos processos terão manipuladores de sinal que limparão o uso de recursos, fecharão bem as conexões e outras tarefas de pré-desligamento. Se você mata com -9, o processo morre imediatamente sem fazer a limpeza. Matar sem -9 vai trabalhar a maior parte do tempo.
Doug Harris

17
kill -9sem razão é como usar uma espingarda para matar um mosquito. :)
Darren Hall

2
Eu costumo fazer um forro pgrep ssh | xargs kill. -9Na verdade, não use para nada
GabLeRoux

2
@GabLeRoux Isso pressupõe que você tenha apenas um único sshcomando ou que todos os sshcomandos que você está executando são bons para matar. Isso dificilmente é uma boa suposição geral.
Tripleee

2
@Avamander Eu me conecto a várias sshinstâncias em vários servidores remotos o tempo todo, algumas delas sem o meu envolvimento ativo direto. Por exemplo, o modo Emacs Tramp abre uma sshconexão nos bastidores quando visito um buffer remoto. Algumas pessoas usam sistemas de arquivos do espaço do usuário que fazem algo semelhante. Não é nada incomum. De fato, eu assumiria que um único usuário, uma única sshinstância, é um caso de uso marginal minoritário. Se funciona para você, é bom para você, mas não é um bom conselho geral.
Tripleee 23/10

20

Ao usar a multiplexação ssh, interromper o processo ssh geralmente é indesejável (mata todas as conexões abertas com esse host) e você não pode acessar facilmente a fuga porque "a fuga não está disponível para sessões multiplexadas". O caminho certo é executar o análogo do comando de encaminhamento que você deseja cancelar, mas adicionando -O cancel. Por exemplo:

ssh -O cancel -L 10002:192.168.0.30:10002 192.168.1.135

Isso desativará esse encaminhamento de porta sem encerrar a sessão. Novamente, isso funcionará apenas se a multiplexação ssh estiver em uso para a conexão com 192.168.1.135 .


Estou tão feliz que isso existe e achei, muito obrigado!
galva

2
Esta é a melhor solução. Para matar o mestre, apenas corra ssh -O exit 192.168.1.135.
Orient

Se você não realiza sessões de multiplexação, veja a excelente resposta do exhuma! (Graças a3nm para a captura meu erro de digitação.)
Alan De Smet

impressionante! essa deve ser a resposta escolhida!
Truong Nguyen

13

Como cancelar uma porta encaminhada em uma sessão SSH já em execução:

  1. Pressione ~+ C(til + maiúscula C)
  2. Tipo -KL port
  3. pressione Enter

Você deve ver isso:

ssh> -KL 10002
Canceled forwarding.

12

Você pode usar a "tecla de escape" (geralmente ~) seguida de C para obter um cli na sua conexão. Você pode remover túneis sem interromper sua conexão.


1
Eu gostaria de saber as especificidades disso. Sei que você pode adicionar túneis depois de entrar no SSH, mas ainda precisa descobrir como remover um.
Carestad

9
Quando você estiver no modo CLI, poderá ajudar. -KL é o oposto de -L, -KR é o oposto de -R e -KD é o oposto de -D. Fazendo "tecla de escape" (~) seguido de # mostra seus túneis.
21713 Jimmy Jimmy Hedman

1
@ JimmyHedman, você pode querer editar sua resposta adicionalmente para adicionar um comentário. Isso torna tudo mais legível. E, às vezes, os comentários ficam ocultos (caso haja muitos).
Exhuma

7

Você pode entrar em um console interativo digitando ~C(capital "C"). Isso permite adicionar e remover dinamicamente encaminhamentos de porta (entre outras coisas).

Essa sequência deve ocorrer logo após um retorno de carro / nova linha. Então, na dúvida, basta digitar Enter~C(em sequência).

Se você não vê os personagens aparecerem no console, está fazendo certo :)

Agora você deve ver um ssh>prompt.

Para remover a porta, basta digitar -KL 10002seguido por Enter(onde 10002está sua porta encaminhada).

O inverso - adicionando um novo encaminhamento - pode ser feito assim (do início ao fim):

Enter~C

ssh> -L 10002:192.168.0.30:10002

Enter


Esta é a resposta certa se você não estiver multiplexando conexões. Se você é, você será devolvido com ~C escape not available to multiplexed sessions. Se for esse o caso, veja a excelente resposta da a3nm.
Alan De Smet
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.