GNU/Linux >> Tutoriels Linux >  >> Linux

5 façons de maintenir les sessions et les processus SSH à distance en cours d'exécution après la déconnexion

SSH ou Secure Shell en termes simples est un moyen par lequel une personne peut accéder à distance à un autre utilisateur sur un autre système, mais uniquement en ligne de commande, c'est-à-dire en mode non graphique. En termes plus techniques, lorsque nous nous connectons en ssh à un autre utilisateur sur un autre système et exécutons des commandes sur cette machine, cela crée en fait un pseudo-terminal et l'attache au shell de connexion de l'utilisateur connecté.

Lorsque nous nous déconnectons de la session ou que la session expire après avoir été inactive pendant un certain temps, le SIGHUP est envoyé au pseudo-terminal et tous les travaux qui ont été exécutés sur ce terminal, même les travaux dont les travaux parents sont lancés sur le pseudo-terminal reçoivent également le signal SIGHUP et sont forcés de se terminer.

Don' t Mlle : 5 pratiques utiles pour assurer la sécurité et la protection du serveur SSH

Seuls les travaux qui ont été configurés pour ignorer ce signal sont ceux qui survivent à la fin de la session. Sur les systèmes Linux, nous pouvons avoir plusieurs façons d'exécuter ces tâches sur le serveur distant ou sur n'importe quelle machine, même après la déconnexion de l'utilisateur et la fin de la session.

Comprendre les processus sous Linux

Processus normal

Les processus normaux sont ceux qui ont une durée de vie d'une session. Ils sont démarrés pendant la session en tant que processus de premier plan et se terminent dans un certain laps de temps ou lorsque la session est déconnectée. Ces processus ont pour propriétaire n'importe quel utilisateur valide du système, y compris root.

Processus orphelin

Les processus orphelins sont ceux qui avaient initialement un parent qui a créé le processus mais après un certain temps, le processus parent est mort ou s'est écrasé involontairement, faisant d'init le parent de ce processus. De tels processus ont init comme parent immédiat qui attend ces processus jusqu'à ce qu'ils meurent ou finissent.

Processus démon

Ce sont des processus intentionnellement orphelins, ces processus qui sont intentionnellement laissés en cours d'exécution sur le système sont appelés démons ou processus intentionnellement orphelins. Ce sont généralement des processus de longue durée qui sont une fois lancés puis détachés de tout terminal de contrôle afin qu'ils puissent s'exécuter en arrière-plan jusqu'à ce qu'ils ne soient pas terminés ou finissent par générer une erreur. Le parent de tels processus meurt intentionnellement, ce qui oblige l'enfant à s'exécuter en arrière-plan.

Techniques pour maintenir la session SSH en cours d'exécution après la déconnexion

Il existe plusieurs façons de laisser les sessions ssh s'exécuter après la déconnexion, comme décrit ci-dessous :

1. Utilisation de la commande screen pour maintenir les sessions SSH en cours d'exécution

écran est un gestionnaire de fenêtres de texte pour Linux qui permet à l'utilisateur de gérer plusieurs sessions de terminal en même temps, de basculer entre les sessions, de se connecter pour les sessions en cours d'exécution à l'écran et même de reprendre la session à tout moment sans se soucier de la déconnexion de la session ou terminal en cours de fermeture.

les sessions d'écran peuvent être démarrées puis détachées du terminal de contrôle en les laissant s'exécuter en arrière-plan, puis être reprises à tout moment et même en tout lieu. Il vous suffit de démarrer votre session sur l'écran et quand vous le souhaitez, de le détacher du pseudo-terminal (ou du terminal de contrôle) et de vous déconnecter. Lorsque vous le sentez, vous pouvez vous reconnecter et reprendre la session.

Démarrer une session d'écran

Après avoir tapé 'écran' commande, vous serez dans une nouvelle session d'écran, dans cette session, vous pouvez créer de nouvelles fenêtres, parcourir les fenêtres, verrouiller l'écran et faire bien d'autres choses que vous pouvez faire sur un terminal normal.

$ screen

Une fois la session d'écran démarrée, vous pouvez exécuter n'importe quelle commande et maintenir la session en cours en la détachant.

Détacher un écran

Juste au moment où vous voulez vous déconnecter de la session à distance, mais que vous voulez garder la session que vous avez créée sur cette machine en vie, alors ce que vous devez faire est de détacher l'écran du terminal afin qu'il n'y ait plus de terminal de contrôle. Après cela, vous pouvez vous déconnecter en toute sécurité.

Pour détacher un écran du terminal déporté, il suffit d'appuyer sur “Ctrl+a” immédiatement suivi de “d” et vous serez de retour au terminal en voyant le message indiquant que l'écran est détaché. Vous pouvez maintenant vous déconnecter en toute sécurité et votre session restera active.

Reprise de la session d'écran détaché

Si vous souhaitez reprendre une session d'écran détachée que vous avez quittée avant de vous déconnecter, reconnectez-vous simplement au terminal distant et tapez “screen -r” dans le cas où un seul écran est ouvert et si plusieurs sessions d'écran sont ouvertes, exécutez “screen -r <pid.tty.host>” .

$ screen -r
$ screen -r <pid.tty.host>

Pour en savoir plus sur la commande screen et son utilisation, suivez simplement le lien :Utiliser la commande screen pour gérer les sessions de terminal Linux

2. Utilisation de Tmux (multiplexeur de terminaux) pour maintenir les sessions SSH en cours d'exécution

Tmux est un autre logiciel créé pour remplacer l'écran . Il possède la plupart des fonctionnalités de l'écran , avec quelques fonctionnalités supplémentaires qui le rendent plus puissant que l'écran.

Il permet, en plus de toutes les options offertes par screen, de diviser les volets horizontalement ou verticalement entre plusieurs fenêtres, de redimensionner les volets de fenêtre, de surveiller l'activité de la session, de créer des scripts en utilisant le mode ligne de commande, etc. Grâce à ces fonctionnalités de tmux, il a été largement adopté par près de toutes les distributions Unix et même elle a été incluse dans le système de base d'OpenBSD.

Démarrer une session Tmux

Après avoir fait ssh sur l'hôte distant et tapé tmux , vous entrerez dans une nouvelle session avec une nouvelle fenêtre s'ouvrant devant vous, dans laquelle vous pourrez faire tout ce que vous faites sur un terminal normal.

$ tmux

Après avoir effectué vos opérations sur le terminal, vous pouvez détacher cette session du terminal de contrôle afin qu'elle passe en arrière-plan et que vous puissiez vous déconnecter en toute sécurité.

Détacher la session Tmux du terminal

Soit vous pouvez exécuter “tmux detach” lors de l'exécution de la session tmux ou vous pouvez utiliser le raccourci (Ctrl+b then d) . Après cela, votre session en cours sera détachée et vous reviendrez à votre terminal d'où vous pourrez vous déconnecter en toute sécurité.

$ tmux detach
Reprise de la session Tmux fermée

Pour rouvrir la session que vous avez détachée et laissée telle quelle lorsque vous vous êtes déconnecté du système, reconnectez-vous simplement à la machine distante et tapez "tmux attach" pour vous rattacher à la session fermée et elle sera toujours là et en cours d'exécution.

$ tmux attach

Pour en savoir plus sur tmux et son utilisation, suivez simplement le lien :Utiliser le multiplexeur de terminaux Tmux pour gérer plusieurs terminaux Linux.

3. Utilisation de la commande nohup pour continuer à exécuter des sessions SSH

Si vous n'êtes pas familier avec l'écran ou tmux , vous pouvez utiliser nohup et envoyez votre longue commande en arrière-plan afin que vous puissiez continuer pendant que la commande continuera à s'exécuter en arrière-plan. Après cela, vous pouvez vous déconnecter en toute sécurité.

Avec la commande nohup, nous disons au processus d'ignorer le SIGHUP signal qui est envoyé par la session ssh à la fin, rendant ainsi la commande persistante même après la déconnexion de la session. Lors de la déconnexion de la session, la commande est détachée du terminal de contrôle et continue de s'exécuter en arrière-plan en tant que processus démon.

Exécuter la commande en utilisant nohup en arrière-plan

Voici un scénario simple dans lequel nous avons exécuté la commande find pour rechercher des fichiers en arrière-plan sur une session ssh à l'aide de nohup, après quoi la tâche a été envoyée en arrière-plan avec une invite de retour donnant immédiatement PID et l'identifiant de la tâche du processus ([JOBID] PID) .

# nohup find / -type f $gt; files_in_system.out 2>1 &
Reprise de la session pour voir si la tâche est toujours en cours d'exécution

Lorsque vous vous reconnectez, vous pouvez vérifier l'état de la commande, la ramener au premier plan en utilisant 'fg %JOBID' suivre son évolution, etc. Ci-dessous, la sortie indique que la tâche est terminée car elle ne s'affiche pas lors de la reconnexion et a donné la sortie qui s'affiche.

# fg %JOBID

4. Utilisation de la commande disown pour maintenir les sessions SSH en cours d'exécution

Une autre façon élégante de laisser votre commande ou une seule tâche s'exécuter en arrière-plan et rester active même après la déconnexion ou la déconnexion de la session consiste à utiliser disown .

Renier , supprime la tâche de la liste des tâches de processus du système, de sorte que le processus ne soit pas tué lors de la déconnexion de la session car il ne recevra pas SIGHUP par le shell lorsque vous vous déconnectez.

L'inconvénient de cette méthode est qu'elle ne doit être utilisée que pour les travaux qui ne nécessitent aucune entrée du stdin et ni besoin d'écrire sur stdout , sauf si vous redirigez spécifiquement l'entrée et la sortie des travaux, car lorsque le travail tentera d'interagir avec stdin ou stdout , il s'arrêtera.

Exécution de la commande en utilisant disown en arrière-plan

Ci-dessous, nous avons envoyé ping commande en arrière-plan afin que ut continue de s'exécuter et soit supprimé de la liste des tâches. Comme on l'a vu, la tâche a d'abord été suspendue, après quoi elle figurait toujours dans la liste des tâches en tant que ID de processus :15368 .

$ ping tecmint.com > pingout &
$ jobs -l
$ disown -h %1
$ ps -ef | grep ping

Après que ce signal de désaveu a été transmis au travail, il a été supprimé de la liste des travaux, bien qu'il fonctionnait toujours en arrière-plan. Le travail serait toujours en cours d'exécution lorsque vous vous reconnecterez au serveur distant, comme indiqué ci-dessous.

$ ps -ef | grep ping

5. Utilisation de la commande setsid pour exécuter des sessions SSH

Un autre utilitaire pour obtenir le comportement requis est setsid . Non a un inconvénient dans le sens où le groupe de processus du processus reste le même, de sorte que le processus exécuté avec nohup est vulnérable à tout signal envoyé à l'ensemble du groupe de processus (comme Ctrl + C ).

setid d'autre part alloue un nouveau groupe de processus au processus en cours d'exécution et, par conséquent, le processus créé est totalement dans un groupe de processus nouvellement alloué et peut s'exécuter en toute sécurité sans crainte d'être tué même après la déconnexion de la session.

Exécuter n'importe quelle commande en utilisant setsid

Ici, cela montre que le processus ‘sleep 10m’ a été détaché du terminal de contrôle depuis sa création.

$ setsid sleep 10m
$ ps -ef | grep sleep

Maintenant, lorsque vous vous reconnecterez à la session, vous trouverez toujours ce processus en cours d'exécution.

$ ps -ef | grep [s]leep

Conclusion

À quelles façons pourriez-vous penser pour maintenir votre processus en cours d'exécution même après vous être déconnecté de la session SSH ? S'il existe un autre moyen efficace auquel vous pouvez penser, mentionnez-le dans vos commentaires.


Linux
  1. Partage de sessions de terminal Linux avec Tmux et Screen

  2. 4 façons de maintenir une commande en cours d'exécution après la déconnexion de la session SSH

  3. Ssh – Comment renier un processus en cours d'exécution et l'associer à un nouveau shell d'écran ?

  4. Ssh - Comment faire pour qu'un processus que je démarre pendant une session Ssh s'exécute après la fin de la session ??

  5. Trouver les 10 principaux processus en cours d'exécution par utilisation de la mémoire et du processeur

Commande d'écran Linux :Maintenir les processus en cours d'exécution malgré une connexion interrompue

Exemples de commandes d'écran pour gérer plusieurs sessions de terminal

Comment maintenir les sessions SSH à distance en cours d'exécution après la déconnexion

4 façons de transférer des fichiers entre des systèmes distants et locaux via SSH

Un gars Windows dans un monde Linux :VS Code et SSH distant

Comment répertorier les sessions d'écran en cours ?