GNU/Linux >> Tutoriels Linux >  >> Linux

Ctrl-c Gestion en session Ssh ?

Lorsque je démarre une session SSH qui exécute une commande de longue durée, que se passe-t-il avec Ctrl +C Gestion (SIGINT) ?

Je vois que la session SSH est fermée, mais je ne sais pas qui obtient le SIGINT en premier :est-ce…

  1. la commande de longue durée à distance ? c'est-à-dire que (a) le gestionnaire de signal dans la commande à distance est appelé et arrête la commande à distance, (b) le shell qui l'a engendré détecte que la commande s'est arrêtée et s'arrête également (c) le sshd distant détecte que le shell s'est arrêté, il ferme donc la connexion

    ou

  2. le ssh local reçoit le signal et ferme la connexion.

Je pense que (1) est en train de se produire, mais je veux m'en assurer.

Je suis également incertain de ce qui se passe avec la gestion par le shell des SIGINT dans ce cas. Par exemple, si je …

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

et Ctrl +C , la connexion à distance est interrompue. Existe-t-il un moyen d'exécuter la commande à distance sous un shell qui restera actif après Ctrl +C ? C'est-à-dire, dans ce cas, arrêter la boucle et me permettre de continuer à travailler sur le shell distant ?

Réponse acceptée :

ssh peut être invoqué de différentes manières, chacune résultant d'un traitement légèrement différent des signaux initiés par le terminal comme Ctrl-C .

  • ssh remotehost exécutera une session interactive sur remotehost . Côté client, ssh essaiera de définir le tty utilisé par stdin en mode "brut", et sshd sur l'hôte distant allouera un pseudo-tty et exécutera votre shell en tant que shell de connexion (par exemple, -bash ).

    Définir le mode brut signifie que les caractères qui enverraient normalement des signaux (tels que Ctrl-C et Ctrl- ) sont simplement insérés dans le flux d'entrée. ssh enverra ces caractères tels quels à l'hôte distant, où ils enverront probablement SIGINT ou SIGQUIT et, généralement, tueront toute commande et vous renverront à un shell sur l'hôte distant. La connexion ssh restera active tant que le shell distant est actif.

  • ssh -t remotehost command args ... exécutera une session interactive sur remotehost , comme ci-dessus, sauf du côté distant, your_shell -c "command args ..." sera exécuté. Comme ci-dessus, si vous tapez Ctrl-C , il sera envoyé à l'hôte distant, où la commande recevra probablement SIGINT et se terminera immédiatement, puis le shell distant se terminera. La télécommande sshd puis ferme la connexion, et ssh rapporte Connection to remotehost closed.

  • ssh remotehost command args ... exécutera une session non interactive sur remotehost . Côté client, ssh ne va pas réglez le tty en mode brut (enfin, sauf pour lire un mot de passe ou une phrase secrète). Si vous tapez Ctrl-C , ssh recevra un SIGINT envoyé et sera immédiatement terminé, sans même émettre un Connection to remotehost closed message.

    Le your_shell -c "command args ..." les processus continueront probablement de s'exécuter sur l'hôte distant . Soit ils sortiront d'eux-mêmes, soit un processus essaiera d'écrire des données sur le socket ssh maintenant fermé, ce qui entraînera l'envoi d'un signal SIGPIPE (généralement) fatal.

Connexe :Comment vider le cache de Magento 1.9.x en utilisant SSH ?
Linux
  1. Comment envoyer des données au presse-papiers local à partir d'une session SSH distante

  2. Passer des variables dans la commande ssh distante

  3. Comment puis-je me déconnecter d'une session SSH ouverte et distante ?

  4. Initialisera 1 à partir d'une session ssh distante (via VPN) tuera ma connexion ssh

  5. Connexion SSH via un tunnel SSH inversé (distant)

Comment SSH dans un répertoire particulier sous Linux

Exécuter des commandes sur des systèmes Linux distants via SSH

SSHFS :montage d'un système de fichiers distant via SSH

Comment effectuer une sauvegarde Linux à distance à l'aide de SSH

Comment utiliser SSH pour se connecter à un serveur distant

Comment :Administration à distance de FreeBSD