ssh -L (erro: bind: Endereço já em uso)

48

Muito simples, eu sei que isso já aconteceu comigo antes. Não foi possível encontrar uma boa resposta na AU.

Eu estava executando uma sessão ssh com portas ligadas:

ssh -L 3000:<server_name>:22

Acabei de perder minha conexão. Quando tento reconectar usando o mesmo comando, recebo o seguinte erro:

bind: Address already in use
channel_setup_fwd_listener: cannot listen to port: 3000

Como redefinir o ssh na minha máquina para permitir que a porta seja ligada novamente? Redefinir a máquina local funciona.

kbuilds
fonte

Respostas:

66

Você não poderia simplesmente matar o que está usando essa porta?

 lsof -ti:5901 | xargs kill -9

lsof -ti:5901para encontrar o que estiver usando port 5901.

Passe a coisa toda kill -9para matar o que estiver usando o port 5901.

Substitua pela porta que você deseja abrir novamente.

user974407
fonte
Sim, você pode alterar o número da porta para qualquer porta que esteja sendo bloqueada. Vou marcar isso como a resposta.
precisa saber é o seguinte
Se você é cauteloso e / ou esquecido como eu, convém executar o lsof por conta própria e descobrir qual é o processo antes de matá-lo. lsof -ti:5901retornará um número de processo, que você passará parakill -9
outubro
3
e se nada estiver usando a porta 5901 (ou qualquer outra porta local que você esteja especificando)?
Michael
Tente sudose o processo não estiver chegandolsof
rich remer
2
Não há motivo para kill -9, a menos que o programa não responda completamente . A interrupção de um processo com o sinal # 9 (SIGKILL) o encerra imediatamente, sem dar ao processo a chance de liberar buffers, fechar identificadores e soquetes de arquivos, remover arquivos temporários etc., tudo o que o processo pode fazer se você usar kill(o padrão é SIGTERM) , seguido por kill -1(SIGHUP; hangup) e kill -2(SIGINT; o que Ctrl + C envia) se isso não funcionar e, finalmente, kill -9 se nada mais funcionar .
TheDudeAbides
12

Suponho que você ainda tenha algo conectado à porta local 3000.

Você pode encontrá-lo com

netstat -tulpn | grep 3000 

e depois descarte-o. Por exemplo, na minha máquina:

[:~] % netstat -tulpn | grep 5900
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
tcp        0      0 0.0.0.0:5900            0.0.0.0:*               LISTEN      2547/vino-server
tcp6       0      0 :::5900                 :::*                    LISTEN      2547/vino-server

identifica corretamente o processo em espera e conectado na porta 5900 (servidor vnc).

Outro comando útil é

fuser 3000/tcp 

... todos eles podem precisar ser executados sudose você não possuir o processo que está abrindo a porta.

Rmano
fonte
Obrigado pela resposta. Vou ter que cavar para ver se consigo recriar o problema. O único aplicativo possível que poderia estar atendendo na porta 3000 foi a antiga sessão ssh que foi desconectada. Meu usuário era o proprietário do processo, então presumi que seria capaz de executar um killall sshe fazer com que ele morresse. Acho que não é o caso
kbuilds
Obrigado pelo lembrete de usar sudo- era o que estava faltando.
ACV
5

Consegui recriá-lo e corrigi-lo, fazendo o seguinte:

  • Abra algo que irá listar seus processos ( ps -ae)
  • Mate o processo chamado sh( kill <proc_number>)

Em seguida, reabra a conexão ssh

Como alternativa, tive sucesso com:

killall ssh

No terminal na máquina local

kbuilds
fonte
2

mais um candidato: ss

pode ser usado assim: ss -ltp | grep 3000para encontrar o programa escutando na porta 3000

mnagel
fonte