uscire da tutte le connessioni SSH con un solo comando e chiudere PuTTY


19

C'è un modo per uscire da tutte le connessioni SSH e chiudere PuTTY in "un colpo"? Lavoro in Windows 7 e utilizzo PuTTY su SSH su vari host Linux.

Un esempio del modo in cui mi trovo a lavorare:

SSH to host1 with PuTTY...
banjer@host1:~> #...doin some work...ooh! need to go check something on host8...
banjer@host1:~> ssh host8
banjer@host8:~> #...doin some work...OK time for lunch. lets close putty...
banjer@host8:~> exit
banjer@host1:~> exit
Putty closes.

Come sopra, un modo per andare da host8 a chiudere PuTTY in un colpo solo? A volte mi ritrovo fino a 5 o 10 host in profondità. Mi rendo conto di poter fare clic sulla X per chiudere la finestra PuTTY, ma mi piace assicurarmi che le mie connessioni SSH vengano chiuse correttamente usando il comando exit. Mi rendo anche conto che sto chiedendo consigli su come aumentare la pigrizia. Lo scriverò semplicemente come "come posso essere più efficiente".


6
Non direttamente quello che stai chiedendo, ma che ne dici di premere ctrl+dpiù volte?
Ulrich Dangel,

@UlrichDangel Non l'ho mai usato prima, ma anche un modo rapido per uscire rapidamente dalle connessioni.
Banjer,

2
Stai davvero annidando sessioni ssh da 5 a 10 livelli di profondità? Ti rendi conto che sta creando un tunnel contorto che rimbalza tutti i pacchetti nella tua sessione ssh attraverso tutti quegli host? Potresti risolvere il problema semplicemente non annidando le sessioni ssh?
jw013,

@ jw013 No, non me ne sono reso conto, ma ha senso. Onestamente, i livelli di 5-10 erano un'esagerazione, ma stavo cercando di illustrare la mia domanda su "come uscire in modo pulito da Putty in un colpo solo".
Banjer,

Risposte:


29

Prova a utilizzare la sshsequenza di escape di terminazione della connessione.

Nella sshsessione, immettere ~.(punto tilde). Non vedrai i personaggi quando li digiti, ma la sessione terminerà immediatamente.

$ ~.
$ Connection to me.myhost.com closed.  

A partire dal man 1 ssh

The supported escapes (assuming the default ‘~’) are:
 ~.      Disconnect.
 ~^Z     Background ssh.
 ~#      List forwarded connections.
 ~&      Background ssh at logout when waiting for forwarded 
         connection / X11 sessions to terminate.
 ~?      Display a list of escape characters.
 ~B      Send a BREAK to the remote system (only useful for SSH protocol
         version 2 and if the peer supports it).
 ~C      Open command line.  Currently this allows the addition of port 
         forwardings using the -L, -R and -D options (see above). It also
         allows the cancellation of existing remote port-forwardings using 
         -KR[bind_address:]port.  !command allows the user to execute a 
         local command if the PermitLocalCommand option is enabled in
         ssh_config(5).  Basic help is available, using the -h option.
 ~R      Request rekeying of the connection (only useful for SSH protocol 
         version 2 and if the peer supports it).

Abbastanza bello! Un modo per inserire ~.un alias o una funzione? Giusto per dare un nome facile da ricordare come exitall. Ora sto chiedendo troppo :). Ho provato alcune cose ~/.bashrcma ho capito -bash: ~.: command not found. Suppongo che bash lo veda come una stringa e non una sequenza di escape proveniente direttamente dalla tastiera.
Banjer,

Mi piace anche la ctrl+dsoluzione, ma questo risponde alla mia domanda più direttamente. Ringrazia tutti.
Banjer,

3
@Banjer bash non vede mai ~., è gestito da sshsolo.
Gilles 'SO- smetti di essere malvagio' il

@Gilles Gotcha, ha un senso.
Banjer,

E non vi è alcuna garanzia che anche PuTTY faccia questo. Il sshclient CLI ha bisogno di questa tecnica perché è CLI. PuTTY è un'applicazione GUI e ci sono modi molto più facili da usare per fare queste cose su una GUI.
Alexios,

12

Basta premere CtrlDe ti farà uscire per tenere premuto Ctrl e premere "d" fino a quando la finestra scompare.


1
Purtroppo, questo non funziona universalmente. Qualsiasi sessione che esegue un editor o altri strumenti a schermo intero è probabile che venga ignorata EOT. E anche bashlo ignorerà nel mezzo di una riga di comando. Provalo tu stesso: digita una singola lettera e prova Ctrl-D.
Alexios,

Cosa fa Ctrl + D, intendo dire che esiste in modo sicuro o semplicemente uccide il processo?
AMB,

Esce in modo sicuro. È una scorciatoia shell che è la stessa cosa che digitare "exit" e premere Invio.
Joe,

In realtà il mio problema (windows git bash & ubuntu bash) a logout.
velis,

sì, credo che anche exit chiami logout poiché le connessioni ssh tendono a non essere sessioni di login.
Joe


2

Un altro modo è fare functionper ssh:

   function ssh(){ /usr/bin/ssh $@ ; exit ; } 

Sfortunatamente anche chiuderà sempre la connessione e il logout dalla console dopo aver finito di lavorare sul sistema remoto.

Si noti che è necessario attivare tale funzione su tutti i server, altrimenti questo hack non funzionerà. Tra l'altro puoi sempre mettere la funzione in ~ / .bashrc o ~ / .whatever_shell_you_use_rc.

Sembra un po 'sporco hack rispetto al modo di uther.


functionnon è POSIX - basta rimuovere la parola chiave e devi citare $@correttamente, altrimenti i tuoi argomenti verranno passati dopo la divisione delle parole (non valida).
Chris Down,

2

Oppure potresti usare execper sostituire il processo della shell con sshquando salti su un altro host:

SSH to host1 with PuTTY...
banjer@host1:~> #...doin some work...ooh! need to go check something on host8...
banjer@host1:~> exec ssh host8
banjer@host8:~> #...doin some work...OK time for lunch. lets close putty...
banjer@host8:~> exit
Putty closes.

5 livelli di profondità non sono belli, poiché il traffico passerà attraverso tutti gli altri server. Per questo motivo non ti consiglio di uccidere PuTTY o ssh (~.), Poiché (a seconda di ciò che fai) ciò potrebbe provocare processi orfani sui server.

Meglio provare ad essere meno "pigri". Fare clic con il tasto destro sulla barra del titolo degli stucchi per aprire rapidamente una nuova sessione. Se si dispone di un server "predefinito" e si accetta 1 salto da quello, la funzione "Sessione duplicata" è molto utile. Soprattutto quando si utilizza l'autenticazione pubkey.


2

Se non ti dispiace fare un po 'di scripting puoi farlo.

Script: myssh.sh

#!/bin/bash
ssh $1
if [ $? -eq 5 ]; then
 exit 5
fi

Chiama tramite il comando punto:

$ . myssh user@server.com

Se vuoi uscire da un livello:

$ exit

Se vuoi uscire da tutto:

$ exit 5

Ovviamente, lo avresti copiato su tutti i computer da cui potresti mai ricevere. Inoltre, non sarebbe più semplice definire una funzione shell chiamata ssh? Ciò eviterebbe il periodo precedente, ecc.
etherfish

-1

Digitare logout nella finestra del terminale putty lo fa per me:

richard@forevermore:~ > logout

Chiude la connessione ssh ed esce dall'applicazione Putty.


Credo che tu non abbia letto correttamente la domanda. OP fa ssh host1, e poi, da host1, fa ssh host8. A quel punto a logoutfarebbe la stessa cosa del exitcomando che già conoscono: uscire da host8e rimetterli dentro host1.
G-Man dice "Ripristina Monica" il

Ok, capisco, mio ​​male.
Richard,
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.