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.
Table des matières
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 :
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 :
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 :
ACTION | RACCOURCI CLAVIER |
Diviser l’écran horizontalement | CTRL+a puis | |
Diviser l’écran horizontalement | CTRL+a puis S |
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 | su_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 |
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 :
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 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.