Utiliser Screen et SSH sous Linux

System-lock-screen

Sous Linux, SSH est très pratique. On se connecte à une machine distante pour y lancer des commandes variées (ping, mises à jour, recherche, surveillance de logs etc). Avec une limite : quand on se déconnecte de la session SSH elle est fermée avec ce qui s’exécutait à l’intérieur. C’est là qu’intervient « Screen ». Un système qui permet de gérer des « écrans » virtuels qu’on peut rattacher et détacher d’une session.

Dans une utilisation « basique » , Screen est très simple à faire fonctionner. Commencez par l’installer si ça n’est pas le cas avec un bon aptitude install screen ou apt-get install screen par exemple. Si ce n’est pas installé vous aurez l’erreur screen: command not found en tentant d’utiliser Screen.

D’habitude pour vous connecter à votre serveur vous tapez surement dans votre Terminal, Putty ou tout autre client SSH : ssh [email protected] ..

Une fois Screen installé vous pouvez soit l’intégrer directement dans votre commande de login avec par exemple :
ssh [email protected] 'screen -d -RR gonzague'
Cela va vous connecter puis créer un screen nommé « gonzague » ou vous y rattacher s’il existe déjà.

Pour vérifier que cela marche vous pouvez taper :
screen -ls ce qui chez moi donne par exemple :
There is a screen on:
8228.gonzague (08/18/2013 08:16:01 AM) (Attached)
1 Socket in /var/run/screen/S-root.

Si vous voulez tester donc ouvrez :
ssh [email protected] 'screen -d -RR gonzague'
puis ping google.com puis fermez la fenêtre du terminal puis réexécutez ssh [email protected] 'screen -d -RR gonzague'

Vous allez retomber sur votre ping :)

A quoi ça sert?
Pour moi les utilités sont multiples par exemple :
– ouvrir une session SSH et continuer à travailler ailleurs, depuis un autre ordinateur même
– ne pas se faire déconnecter en pleine manoeuvre et endommager son système pendant une opération critique car on a oublié de charger son ordinateur portable (oui je parle de moi.. même si je n’ai jamais eu de déconnexion en moment critique ^^)
– pouvoir laisser quelqu’un accéder à la session à son tour
– gérer plusieurs écrans sur une même session par exemple un tail de logs dans un screen en éditant une configuration dans un autre

Appeler automatiquement Screen en ouvrant une session via SSH:

C’est possible en ajoutant en haut du fichier .bashrc situé dans le dossier racine de votre utilisateur (/home/utilisateur, /root.. selon les cas).

Les lignes à ajouter sont :

# Auto-screen invocation. see: http://taint.org/wk/RemoteLoginAutoScreen
# if we're coming from a remote SSH connection, in an interactive session
# then automatically put us into a screen(1) session.   Only try once
# -- if $STARTED_SCREEN is set, don't try it again, to avoid looping
# if screen fails for some reason.
if [ "$PS1" != "" -a "${STARTED_SCREEN:-x}" = x -a "${SSH_TTY:-x}" != x ]
then
  STARTED_SCREEN=1 ; export STARTED_SCREEN
  [ -d $HOME/lib/screen-logs ] || mkdir -p $HOME/lib/screen-logs
  sleep 1
  screen -RR && exit 0
  # normally, execution of this rc script ends here...
  echo "Screen failed! continuing with normal bash startup"
fi
# [end of auto-screen snippet]

Créez aussi un fichier .screenrc dans ce répertoire et donnez lui ce contenu :

# see http://www4.informatik.uni-erlangen.de/~jnweiger/screen-faq.html
# support color X terminals
termcap  xterm 'XT:AF=\E[3%dm:AB=\E[4%dm:AX'
terminfo xterm 'XT:AF=\E[3%p1%dm:AB=\E[4%p1%dm:AX'
termcapinfo xterm 'XT:AF=\E[3%p1%dm:AB=\E[4%p1%dm:AX:hs:ts=\E]2;:fs=\007:ds=\E]2;screen\007'
termcap  xtermc 'XT:AF=\E[3%dm:AB=\E[4%dm:AX'
terminfo xtermc 'XT:AF=\E[3%p1%dm:AB=\E[4%p1%dm:AX'
termcapinfo xtermc 'XT:AF=\E[3%p1%dm:AB=\E[4%p1%dm:AX:hs:ts=\E]2;:fs=\007:ds=\E]2;screen\007'

# auto-screen support; see http://taint.org/wk/RemoteLoginAutoScreen
# detach on hangup
autodetach on
# no startup msg
startup_message off
# always use a login shell
shell -$SHELL

# auto-log
logfile $HOME/lib/screen-logs/%Y%m%d-%n.log
deflog on

Maintenant en ouvrant une session vous créez automatiquement un screen ou récupérez le dernier utilisé. Pratique!

Plus d’infos sur l’utilisation au login ici : http://taint.org/wk/RemoteLoginAutoScreen

Tags: