Recherche de site Web

5 façons de maintenir l’exécution des sessions et des processus SSH à distance 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 GUI. En termes plus techniques, lorsque nous nous connectons à un autre utilisateur sur un autre système et exécutons des commandes sur cette machine, il crée en fait un pseudo-terminal et l’attache à l’interpréteur de commandes 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 signal 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.

Ne manquez pas : 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 de nombreuses façons de faire fonctionner 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 la 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 leur propriétaire comme 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é par inadvertance, faisant de init le parent de ce processus. De tels processus ont init comme leur parent immédiat qui attend ces processus jusqu’à ce qu’ils meurent ou finissent.

Processus démoniaque

Il s’agit de processus intentionnellement orphelins, ces processus qui sont intentionnellement laissés en cours d’exécution sur le système sont appelés processus démon ou intentionnellement orphelins. Il s’agit généralement de 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 ces processus meurt intentionnellement en faisant exécuter child en arrière-plan.

Techniques pour maintenir l’exécution d’une session SSH après la déconnexion

Il peut y avoir différentes façons de laisser les sessions ssh en cours d’exécution après la déconnexion, comme décrit ci-dessous :

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

screen 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, d’enregistrer 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 de la fermeture du terminal.

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

Démarrage d’une session d’écran

Après avoir tapé la commande 'screen', vous serez dans une nouvelle session d’écran, au sein de cette session, vous pouvez créer de nouvelles fenêtres, passer d’une fenêtre à l’autre, verrouiller l’écran et faire bien d’autres choses que vous pouvez faire sur un terminal normal.

$ screen

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

Détacher un écran

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

Pour détacher un écran du terminal distant, il suffit d’appuyer sur « Ctrl+a » immédiatement suivi de « d » et vous serez de retour au terminal en voyant le message que l’écran est détaché. Vous pouvez maintenant vous déconnecter en toute sécurité et votre session sera laissée en vie.

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, il vous suffit de vous reconnecter au terminal distant et de taper « screen -r " si 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, il suffit de suivre le lien : Utiliser la commande screen pour gérer les sessions de terminal Linux

2. Utilisation de tmux (Terminal Multiplexer) pour maintenir les sessions SSH en cours d’exécution

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

Il permet, en plus de toutes les options offertes par l’écran, de diviser les volets horizontalement ou verticalement entre plusieurs fenêtres, de redimensionner les volets des fenêtres, de surveiller l’activité des sessions, de créer des scripts à l’aide du mode ligne de commande, etc. En raison de ces caractéristiques de tmux, il a été largement adopté par presque toutes les distributions Unix et a même été inclus 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 pouvez 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 " sur la session tmux en cours d’exécution, soit vous pouvez utiliser le raccourci (Ctrl+b puis d). Après cela, votre session en cours sera détachée et vous reviendrez à votre terminal à partir duquel vous pourrez vous déconnecter en toute sécurité.

$ tmux detach

Reprise de la session Tmux à huis clos

Pour rouvrir la session que vous avez détachée et laissée telle quelle lorsque vous vous êtes déconnecté du système, il suffit de vous reconnecter à la machine distante et de taper « tmux attach » pour la 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 comment l’utiliser, il suffit de suivre 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 très familier avec screen ou tmux, vous pouvez utiliser nohup et envoyer votre commande de longue durée 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 indiquons au processus d’ignorer le signal SIGHUP qui est envoyé par la session ssh à la terminaison, faisant ainsi persister la commande même après la déconnexion de la session. Lors de la déconnexion de la session, la commande est supprimée du terminal de contrôle et continue de s’exécuter en arrière-plan en tant que processus de démon.

Exécution d’une commande à l’aide de 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 la session ssh à l’aide de nohup, après quoi la tâche a été envoyée en arrière-plan avec l’invite revenant immédiatement donnant le PID et l’ID de travail du processus ([JOBID] PID).

# nohup find / -type f $gt; files_in_system.out 2>1 &

Reprise de la session pour voir si le travail est toujours en cours d’exécution

Lorsque vous vous reconnectez, vous pouvez vérifier l'état de la commande, la remettre au premier plan à l'aide de 'fg %JOBID' pour surveiller sa progression, etc. Ci-dessous, le résultat indique que le travail a été terminé car il ne s’affiche pas lors de la reconnexion et a donné le résultat 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 en vie même après la déconnexion ou la déconnexion de la session consiste à utiliser désavouer.

Renier, supprime le travail de la liste des travaux de processus du système, de sorte que le processus est protégé contre l’arrêt lors de la déconnexion de 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 tâches qui n’ont pas besoin d’entrée à partir du stdin et qui n’ont pas besoin d’écrire dans stdout, à moins que vous ne redirigez spécifiquement l’entrée et la sortie des tâches, car lorsque la tâche essaiera d’interagir avec stdin ou stdout, elle s’arrêtera.

Exécution de la commande à l’aide de disown en arrière-plan

Ci-dessous, nous avons envoyé la commande ping à l’arrière-plan afin que ut continue de fonctionner et soit supprimé de la liste des tâches. Comme nous l’avons vu, le travail a d’abord été suspendu, après quoi il figurait toujours dans la liste des travaux sous le nom d’ID de processus : 15368.

$ ping linux-console.net > pingout &
jobs -l
disown -h %1
ps -ef | grep ping

Après que ce signal de désapprobation ait été transmis à la tâche, elle a été supprimée de la liste des tâches, bien qu’elle s’exécute toujours en arrière-plan. La tâche serait toujours en cours d’exécution lorsque vous vous reconnecteriez 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. Nohup a un inconvénient dans le sens où le groupe de processus du processus reste le même, de sorte que le processus qui s’exécute avec nohup est vulnérable à tout signal envoyé à l’ensemble du groupe de processus (comme Ctrl + C).

setsid, 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 craindre d’être tué, même après la déconnexion de la session.

Exécuter n’importe quelle commande à l’aide de setsid

Ici, il montre que le processus 'sleep 10m' a été détaché du terminal de contrôle, depuis le moment où il a été créé.

$ setsid sleep 10m
ps -ef | grep sleep

Désormais, lorsque vous vous reconnectez à la session, ce processus est toujours en cours d’exécution.

$ ps -ef | grep [s]leep

Conclusion

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

Articles connexes: