ssh -L (errore: bind: indirizzo già in uso)


48

Abbastanza semplice, so che questo mi è successo prima. Impossibile trovare una buona risposta su AU.

Stavo eseguendo una sessione ssh con porte associate:

ssh -L 3000:<server_name>:22

Ho appena perso la mia connessione. Quando provo a riconnettermi usando lo stesso comando, ottengo il seguente errore:

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

Come posso resettare ssh sul mio computer per consentire nuovamente il collegamento della porta? Il ripristino della macchina locale funziona.

Risposte:


66

Non potresti semplicemente uccidere qualunque cosa stia usando quella porta?

 lsof -ti:5901 | xargs kill -9

lsof -ti:5901per trovare qualunque cosa stia usando la porta 5901.

Passa tutto kill -9per uccidere qualunque cosa stesse usando la porta 5901.

Sostituisci con la porta che desideri riaprire.


Sì, è possibile modificare il numero di porta in qualunque porta venga bloccata. Lo segnerò come risposta.
kbuilds,

Se sei cauto e / o smemorato come me, potresti voler eseguire lsof da solo e scoprire qual è il processo prima di ucciderlo. lsof -ti:5901restituirà un numero di processo, che poi passa akill -9
octern

3
cosa succede se nulla utilizza la porta 5901 (o qualunque porta locale si sta specificando)?
Michael,

Prova sudose il processo non si lsof
avvia

2
Non c'è motivo di farlo a kill -9meno che il programma non risponda completamente . L'uccisione di un processo con il segnale n. 9 (SIGKILL) lo interrompe immediatamente senza dare al processo la possibilità di svuotare i buffer, chiudere i filehandle e i socket, rimuovere i file temporanei, ecc., Tutto ciò che il processo può fare se lo si utilizza kill(predefinito su SIGTERM) , seguito da kill -1(SIGHUP; hangup) e kill -2(SIGINT; cosa invia Ctrl + C) se non funziona, e infine kill -9 se nient'altro funziona .
TheDudeAbides,

12

Suppongo che tu abbia ancora qualcosa collegato alla porta locale 3000.

Puoi trovarlo con

netstat -tulpn | grep 3000 

e poi eliminalo. Ad esempio nella mia macchina:

[:~] % 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 correttamente il processo in attesa e collegato sulla porta 5900 (server vnc).

Un altro comando utile è

fuser 3000/tcp 

... potrebbe essere necessario eseguirli tutti sudose non si possiede il processo che sta aprendo la porta.


Grazie per la risposta. Dovrò scavare per vedere se riesco a ricreare il problema. L'unica possibile applicazione che avrebbe potuto essere in ascolto sulla porta 3000 era la vecchia sessione ssh che era stata disconnessa. Il mio utente possedeva il processo, quindi ho pensato che sarei stato in grado di eseguire un killall sshe farlo morire. Immagino che non sia così
kbuilds il

Grazie per il promemoria da usare sudo: ecco cosa mi mancava.
ACV,

5

Sono stato in grado di ricrearlo e risolverlo nel modo seguente:

  • Apri qualcosa che elencherà i tuoi processi ( ps -ae)
  • Uccidi il processo chiamato sh( kill <proc_number>)

Quindi riaprire la connessione ssh

In alternativa, ho avuto successo con:

killall ssh

Nel terminale sulla macchina locale


2

un altro contendente: ss

può essere usato in questo modo: ss -ltp | grep 3000per trovare il programma in ascolto sulla porta 3000

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.