screen sur Linux : lancer plusieurs commandes sans perdre leurs exécutions

Les administrateurs ou utilisateurs Linux débutants rencontrent toujours ce problème au départ lors de connexion SSH.
Comment faire en sorte que les commandes lancées continuent même si la session SSH se ferme et est perdue ?
Vous souhaitez lancer plusieurs commandes qui prennent du temps sans devoir lancer de nouvelle session SSH ?

Screen sur Linux est la solution idéale qui permet de lancer une ou plusieurs commandes dans un terminal virtuelle.
Ce terminal virtuelle perdure même si l’utilisateur n’y est plus connecté.
A partir de là, il est tout à fait possible de lancer une ou plusieurs commandes qui ne se termineront pas même si vous perdez votre session SSH.
C’est un peu comme pour Terminal Serveur sur Linux lorsque l’utilisateur est déconnecté, le bureau Windows reste en place.

Cet article vous explique comment utiliser screen sur Linux pour exécuter ou ou plusieurs commandes.

screen sur Linux : lancer plusieurs commandes sans perdre leurs exécutions

screen sur Linux : lancer des commandes SSH sans les perdre

screen permet de créer des terminaux virtuelles auquel un ou plusieurs utilisateurs peuvent s’attacher et lancer des commandes.
Cela permet en outre de partager un terminal qui sera visible de plusieurs utilisateurs connectés.
Mais surtout screen permet de laisser ces terminaux virtuelles en cours de fonctionnement même si l’utilisateur est déconnecté.

Cet utilitaire screen n’est pas installé par défaut sur votre distribution, il faut l’installer manuellement en utilisant les commandes de packages de votre distribution :

apt-get install screen
yum install screen
etc

Comme toute commande linux, screen accepte de multiples options :

screen sur Linux : lancer plusieurs commandes sans perdre leurs exécutionsLes bureaux virtuelles sont identifiés par un nom de session ou un identifiant.
Rapidement donc pour débuter et manipuler un ou plusieurs écrans virtuels :

  • créer un bureau virtuel : screen -a ou screen tout court
  • lister les bureaux virtuels : screen -ls
  • s’attacher à un bureau virtuel dont l’identifiant est 1234 : screen -dr 1234

A partir de là, vous créez des bureaux virtuels lancés une commande qui peut prendre un certains temps à s’exécuter.
Pendant ce temps, vous pouvez revenir au terminal d’origine et continuez à travailler afin d’attendre que cette commande se soit terminée.
Cela est beaucoup plus pratique que de passer la commande en arrière plan et revenir dessus avec fg.

Une fois que vous êtes entré dans un bureau virtuel, ce dernier accepte de multiples touches raccourcis pour effecteur diverses actions.
La plupart de ces touches raccourcis débutent par CTRL+a suivi d’une lettre.
On très facilement obtenir la liste des raccourcis clavier avec CTRL+a suivi de ?.
Ce qui nous donne :

screen sur Linux : lancer plusieurs commandes sans perdre leurs exécutions

et donc pour les deux raccourcis essentiels :

  • pour fermer un écran virtuel complètent : CTRL+d
  • Se détacher et sortir d’un écran virtuel pour y revenir plus tard : Ctrl + a puis d
  • Passer une commande : Ctrl+a puis :

Ces commandes à saisir fonctionnent un peu comme vim puisque tout en bas de l’écran s’affiche le prompt pour y saisir la commande.
Enfin, il est tout à fait possible d’envoyer une commande à un terminal :

screen -S <nom> -X <commande>

Ex :

screen -S 1234 -X quit

Diviser un terminal virtuel en plusieurs commandes

Il est enfin possible de séparer un écran virtuel avec d’autres écran virtuel afin de pouvoir lancer plusieurs commandes.
Le principe est d’utiliser les raccourcis suivants :

  • pour diviser l’écran horizontalement : CTRL +a puis |
  • verticalement : CTRL + a puis S

Ensuite, on peut jouer sur ces différents écrans avec les combinaisons de touches suivants :

  • Créer un nouvel écran : Ctrl + a puis c
  • Lister tous les écrans (dans le cas d’un partage) : Ctrl + a puis « 
  • Renommer une fenêtre: Ctrl +A puis A
  • Pour passer d’un écran à l’autre : Ctrl + a puis n ou Ctrl + a puis tabulation
  • Revenir à l’écran précédent : Ctrl + a puis p
  • Sauter vers un écran recyclé : Ctrl + a puis space

Dans certains cas, il est utile d’utiliser les commandes comme :

  • resize qui permet de redimensionner la taille d’un écran virtuel – ex : resize 50% ou encore resize 100 pour une taille de 100 pixel.
  • lorsque vous sortez de l’écran, vous perdez ces derniers, il faut enregistrer l’état avec : save layout default
  • remove permet de supprimer un écran

Comme c’est assez visuel, le plus simple est de regarder la vidéo.

Exécuter une commande automatiquement

Le fichier .screenrc permet de configurer des commandes qui seront exécutées automatiquement lors de l’attachement à un terminal virtuel.

Ce sont exactement les mêmes commandes que l’on peut appliquer avec le colon accessible par CTRL+A suivi de :

A partir de là, il est possible de faire différente chose.
Par exemple pour assigner une touche spécifique, comme ci-dessous utiliser la commande bindkey :

# KeyBindings
bindkey -k F1 kill  # bind f11 to kill terminal
bindkey -k F2 quit  # bind f12 to quit screen
bindkey ² prev   # bind "²" to move to previous window
bindkey = next   # bind "=" to move to next window
bindkey "^[q" prev
bindkey "^[w" next

La commande screen -t permet de lancer une commande en indiquant le nom et numéro écran

screen -t <Nom écran> <numéro> ssh -XC <adresser serveur>

et enfin on peut préparer l’écran virtuel avec les dispositions souhaitées :

split -v
screen -t bash 0 bash
select bash
focus right
split
screen -t HTOP 1 htop
select HTOP
focus down
screen -t SSH 2 ssh -XC root@ovh.malekal.com
select SSH

ce qui nous permet d’obtenir ceci : screen sur Linux : lancer plusieurs commandes sans perdre leurs exécutions

Pour explications de ces commandes :

  • On split l’écran verticalement en deux (split -v)
  • Dans l’écran de gauche, on lance bash (screen -t)
  • puis on sélectionne cet écran pour passer à celui de droite (focus right)
  • on divise l’écran horizontalement (split)
  • puis on lance htop et on sélectionne l’écran
  • enfin on passe à l’écran en dessous (focus down) pour lancer la commande SSH.

Les commandes SSH peuvent être empilé et on peut alors passer de l’une à l’autre avec CTRL+A suivi du numéro.
Vous pouvez tester l’enchaînement manuellement avec le colon.

Protéger un écran virtuel par un mot de passe

Le fichier .screenrc permet d’exécuter une commande lors de l’attachement à un écran virtuel. Rien n’empêche donc de demander un mot de passe. Il faut dans un premier temps créer le hash d’un mot de passe chiffré, par exemple pour obtenir le hash du mot de passe « kikoo », saisir :

mkpasswd kikoo
kP.sZx0lpOS6g

puis dans le fichier .screenrc, on inscrit le mot de passe chiffré de cette manière :

password crypt_password

ainsi soit donc dans notre exemple :

password kP.sZx0lpOS6g

La prochaine fois que vous allez créé un nouvel écran virtuel et tenter de vous y attacher, le mot de passe vous sera demandé.
screen sur Linux : lancer plusieurs commandes sans perdre leurs exécutions

Screen en vidéo

Enfin comme tout cela est assez visuel et pas forcément simple à expliquer, voici une vidéo qui montre toutes les possibilités de screen.

(Visité 294 fois, 1 visites ce jour)