Come rimuovo una porta inoltrata SSH


52

Prima ssh -L 10002:192.168.0.30:10002 192.168.1.135stabilivo il port forwarding ma ora devo rimuoverlo.

Come faccio a fare questo?


Spesso ci rendiamo conto che la porta viene ancora inoltrata quando lanciamo una nuova sessione ssh eseguendo di nuovo lo stesso comando e ricevendo il Warning: remote port forwarding failed for listen portmessaggio.
GabLeRoux

Risposte:


56

Se stai usando Linux puoi terminare il processo:

ps aux | grep ssh

e quindi usare

kill <id>

Per uccidere il processo.

Se il comando kill non ha esito positivo, puoi provare

kill -9 <id>

31
No. No. No. Per favore, per favore, per favore non usare kill -9fino a dopo aver provato solo kill. Molti processi avranno gestori di segnali che puliranno il loro uso delle risorse, chiuderanno in modo pulito connessioni e altre attività di pre-spegnimento. Se uccidi con -9, il processo si interrompe immediatamente senza eseguire la pulizia. Uccidere senza -9 sarà lavorare la maggior parte del tempo.
Doug Harris,

17
kill -9senza motivo è come usare un fucile da caccia per uccidere una zanzara. :)
Darren Hall il

2
Di solito faccio una fodera pgrep ssh | xargs kill. Non usare -9per niente davvero
GabLeRoux

2
@GabLeRoux Questo presuppone che tu abbia un solo sshcomando, o che tutti i sshcomandi che stai eseguendo vanno bene per uccidere. Questo non è certo un buon presupposto generale.
Tripleee

2
@Avamander Mi connetto a più sshistanze su più server remoti per tutto il tempo, alcuni senza il mio coinvolgimento attivo diretto. Ad esempio, la modalità Emacs Tramp apre una sshconnessione dietro le quinte quando visito un buffer remoto. Alcune persone usano filesystem userspace che fanno qualcosa di simile. Non è affatto raro. In effetti, suppongo che un singolo utente, una singola sshistanza sia un caso d'uso marginale di minoranza. Se funziona per te, va bene per te, ma non è un buon consiglio generale.
Tripleee,

20

Quando si utilizza il multiplexing ssh, l'uccisione del processo ssh è spesso indesiderabile (uccide tutte le connessioni aperte con quell'host) e non è possibile accedere facilmente alla escape perché "escape non disponibile per le sessioni multiplexate". Il modo giusto è quindi eseguire l'analogo del comando di inoltro che si desidera annullare, ma aggiungendo -O cancel. Per esempio:

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

Questo disabiliterà questo port forwarding senza terminare la sessione. Ancora una volta, questo funzionerà solo se si utilizza il multiplexing ssh per la connessione a 192.168.1.135 .


Sono così felice che esista e l'ho trovato, molte grazie!
galva,

2
Questa è la migliore soluzione Per uccidere il padrone basta correre ssh -O exit 192.168.1.135.
Orienta il

Se si non multiplexing sessioni, vedere la risposta eccellente del exhuma! (Grazie a3nm per aver catturato il mio errore di battitura.)
Alan De Smet,

eccezionale! questa dovrebbe essere la risposta scelta!
Truong Nguyen,

13

Come annullare una porta inoltrata in una sessione SSH già in esecuzione:

  1. Premi ~+ C(tilde + maiuscola C)
  2. genere -KL port
  3. premere Invio

Dovresti vedere questo:

ssh> -KL 10002
Canceled forwarding.

12

È possibile utilizzare il "tasto Esc" (di solito ~) seguito da C per ottenere un cli alla connessione. Da lì è possibile rimuovere i tunnel senza interrompere la connessione.


1
Mi piacerebbe conoscere i dettagli di questo. So che puoi aggiungere tunnel dopo aver inserito SSH, ma devi ancora scoprire come eliminarne uno.
carestad,

9
Quando si è in modalità CLI, è possibile fornire assistenza. -KL è l'opposto di -L, -KR è l'opposto di -R e -KD è l'opposto di -D. Fare "chiave di fuga" (~) seguito da # mostra i tuoi tunnel.
Jimmy Hedman,

1
@JimmyHedman potresti voler modificare la tua risposta in aggiunta all'aggiunta di un commento. Rende tutto più leggibile. E a volte i commenti sono nascosti (nel caso ce ne siano troppi).
exhuma,

7

È possibile accedere a una console interattiva digitando ~C("C" maiuscola). Ciò consente di aggiungere e rimuovere dinamicamente i port forwarding (tra le altre cose).

Questa sequenza deve venire subito dopo un ritorno a capo / newline. Quindi, nel dubbio, basta digitare Enter~C(in sequenza).

Se non vedi apparire i personaggi sulla console, lo stai facendo bene :)

Ora dovresti vedere un ssh>prompt.

Per rimuovere la porta, inserisci semplicemente -KL 10002seguito da Enter(dov'è la 10002tua porta inoltrata).

L'inverso - aggiungendo un nuovo avanti - può essere fatto in questo modo (dall'inizio alla fine):

Enter~C

ssh> -L 10002:192.168.0.30:10002

Enter


Questa è la risposta giusta se stai non multiplexing connessioni. Se lo sei, verrai rimbalzato con ~C escape not available to multiplexed sessions. In tal caso, vedere la risposta eccellente di a3nm.
Alan De Smet,
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.