Menu Fermer

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 exécuter une ou plusieurs commandes dans un terminal virtuel.
Ce terminal virtuel perdure même si l’utilisateur ferme la session SSH.
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.

Ce tutoriel 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 virtuels 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 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écutions

Les terminaux virtuels 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 terminal virtuel avec screen :

screen -a

Lister les terminaux virtuels :

screen -ls

S’attacher à un terminal virtuel dont l’identifiant est 1234 :

screen -dr 1234

A partir de là, vous créez des terminaux 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 la commande 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

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 :

ACTIONRACCOURCI CLAVIER
Diviser l’écran horizontalementCTRL+a puis |
Diviser l’écran horizontalement CTRL+a puis S
Créer un nouvel écranCTRL+a puis c
Lister tous les écrans (dans le cas d’un partage)CTRL+a puis
Renommer une fenêtreCTRL+A puis A
Pour passer d’un écran à l’autresu_rclavier]CTRL[/su_rclavier]+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 Espace
Les raccourcis claviers pour naviguer dans screen

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 [email protected]
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.