GNU/Linux >> Linux Esercitazione >  >> Linux

Ctrl-c Gestione nella sessione Ssh?

Quando avvio una sessione SSH che esegue un comando di lunga durata, cosa succede con Ctrl +C (SIGINT) gestione?

Vedo che la sessione SSH è chiusa, ma non sono sicuro di chi riceverà prima il SIGINT:è vero...

  1. il comando a distanza di lunga durata? ovvero, (a) viene chiamato il gestore del segnale nel comando remoto e interrompe il comando remoto, (b) la shell che lo ha generato rileva che il comando si è interrotto e si interrompe anche (c) l'sshd remoto rileva la shell interrotta, quindi chiude la connessione

    o

  2. lo ssh locale riceve il segnale e chiude la connessione.

Penso che (1) stia accadendo, ma voglio essere sicuro.

Sono anche incerto su cosa succede con la gestione della shell di SIGINT in questo caso. Ad esempio, se io...

ssh remote 'while true ; do sleep 1 ; date ; done'

e Ctrl +C , la connessione remota viene interrotta. C'è un modo per eseguire il comando remoto sotto una shell che rimarrà attiva dopo Ctrl +C ? Cioè, in questo caso, interrompere il ciclo e consentirmi di continuare a lavorare sulla shell remota?

Risposta accettata:

ssh può essere invocato in diversi modi, ciascuno con un trattamento leggermente diverso dei segnali iniziati dal terminale come Ctrl-C .

  • ssh remotehost eseguirà una sessione interattiva su remotehost . Sul lato client, ssh proverà a impostare il tty utilizzato da stdin in modalità "raw" e sshd sull'host remoto assegnerà una pseudo-tty ed eseguirà la tua shell come shell di accesso (ad es. -bash ).

    L'impostazione della modalità raw significa che i caratteri che normalmente invieranno segnali (come Ctrl-C e Ctrl- ) sono invece appena inseriti nel flusso di input. ssh invierà tali caratteri così come sono all'host remoto, dove probabilmente invieranno SIGINT o SIGQUIT e, in genere, uccideranno qualsiasi comando e torneranno a una shell sull'host remoto. La connessione ssh rimarrà attiva, finché la shell remota è attiva.

  • ssh -t remotehost command args ... eseguirà una sessione interattiva su remotehost , proprio come sopra, tranne che sul lato remoto, your_shell -c "command args ..." sarà eseguito. Come sopra, se digiti Ctrl-C , verrà inviato all'host remoto, dove è probabile che il comando riceverà SIGINT e uscirà immediatamente, quindi la shell remota uscirà. Il sshd remoto quindi chiude la connessione e ssh segnala Connection to remotehost closed.

  • ssh remotehost command args ... eseguirà una sessione non interattiva su remotehost . Sul lato client, ssh non imposta tty in modalità raw (beh, tranne per leggere una password o una passphrase). Se digiti Ctrl-C , ssh verrà inviato SIGINT e verrà immediatamente terminato, senza nemmeno emettere un Connection to remotehost closed messaggio.

    Il your_shell -c "command args ..." i processi probabilmente rimarranno in esecuzione sull'host remoto . O usciranno da soli, oppure un processo proverà a scrivere dati nel socket ssh ora chiuso, che causerà l'invio di un segnale SIGPIPE (tipicamente) fatale.

Correlati:come svuotare la cache di Magento 1.9.x usando SSH?
Linux
  1. Ssh – Registrazione dei tentativi di accesso Ssh?

  2. Ricollegare alla sessione X11 persa?

  3. Consenti accesso Ssh remoto?

  4. Passaggio di variabili nel comando ssh remoto

  5. Mantieni attiva la sessione SSH

Come SSH in una directory particolare su Linux

Esegui comandi su sistemi Linux remoti tramite SSH

SSHFS:montaggio di un file system remoto su SSH

Come eseguire un backup Linux remoto utilizzando SSH

Come utilizzare SSH per connettersi a un server remoto

Procedura:Amministrazione remota di FreeBSD