Table des matières

Shells

Liens

Screen

Screen

Se détacher du screen

Il est possible, par exemple, de lancer une commande qui dure longtemps et qu'on veut reprendre plus tard, même depuis un autre poste.

Exemple :

Depuis le poste 1 on lance

screen

On se retrouve dans un shell un peu particulier (essayez la touche Backspace pour vous en rendre compte).

Tapons en suite une commande qui dure assez longtemps

apt update && apt upgrade

la commande va travailler. Pendant ce temps, quittons le shell screen en tapant

ctrl + a puis d

on revient au shell “normal”

ensuite, pour revenir sur notre shell screen, il suffit de taper

  screen -r

Partager un terminal

Sur le poste destination, créer un nouveau screen en nommant la session par exemple, TEST:

screen -S TEST

Depuis un second poste, se connecter en ssh sur la machine destination puis se connecter au screen en faisant :

screen -x TEST

Agent forwarding

Faire en sorte que GNU Screen utilise le SSH Agent forwarding Trouvé sur superuser.com Dans le fichier .profile, on créé un lien symbolique avec un nom “fixe” test $SSH_AUTH_SOCK && ln -sf “$SSH_AUTH_SOCK” “/tmp/ssh-agent-$USER-screen”

Dans le fichier .screenrc, on utilise le nom fixe setenv SSH_AUTH_SOCK “/tmp/ssh-agent-$USER-screen”

DSH ou Danser Shell

Automatiser le lancement de plusieurs shells (et donc de commandes) sur des machines distantes.

Principe général

Créer un groupe de machines dans un fichier /etc/dsh/group/un_groupe. Ex :

192.168.0.2
192.168.0.3

ou en précisant un utilisateur

toto@192.168.0.2
titi@192.168.0.3

on peut bien sur créer autant de groupe que souhaité, une machine pouvant d'ailleurs apparaitre dans plusieurs groupes.

ensuite

dsh -g un_groupe "une commande"

–> la commande “un commande” sera passée sur toutes les machines du groupe “un_groupe”

Installation

sudo apt-get install dsh

Parametrage

Timeout

dsh s'appuie sur ssh, aussi lorsqu'il tente de se connecter sur une machine, c'est le parametre ConnectTimeout de /etc/ssh/ssh_config (ou ~/.ssh/config) qui est employé.

La valeur par défaut de celui ci est parfois inadaptée à dsh. Ramener cette valeur à 1 ou 2 secondes est plus pratique.

avec sudo

Soit le compte “admin” et le compte “user”. En supposant que l'on se connecte sur les machines avec le compte admin mais que l'on souhaite lancer une commande “en tant que” user, il faudrait procéder ainsi.

Prérequis : utiliser sudo

dsh -M -g mon_groupe "sudo -i -u user ma_commande_de_user"

-M permet d'afficher les noms des machines sur lesquelles la commande s'exécute. C'est plus pratique pour suivre la progression.

-i “simulate initial login” On va donc charger, par ex, le .profile de “user” -u pour preciser l'utilisateur

commandes longues

Dans la mesure où par défaut les commandes sont effectuées séquentiellement, machine par machine, quand il s'agit d'exécuter une commande longue, sur de nombreuses machines, il est judicieux de lancer ces commandes de facon concurrente, en parrallèle. Il faut pour cela utiliser les options -c -i. Exemple :

 dsh -M -i -c -g un_groupe "md5sum un_fichier"

-c Executes shell concurrently.
-i Duplicates the input to dsh process to individual process that are remotely invoked. Needs to have –concurrent-shell set.

Astuces

Selon les commandes employées dsh n'affiche rien à l'issue de la commande. Par conséquent on ne sait pas quand la commande est terminée. Une astuce consiste à ajouter une seconde commande inutile après la premiere, par exemple la commande “id”.

dsh -M -g group "commande_sans_retour && id"

ClusterSSH

ClusterSSH permet de lancer des commandes dans plusieurs shell en même temps. Très utile pour administrer des salles informatiques sous Linux.

Installation

  sudo apt-get install clusterssh

puis éditer le fichier ~/.csshrc en créant notamment des clusters ainsi :

clusters=salle1 salle2

salle1=user@192.168.1.1 user@192.168.1.2 user@192.168.1.3 user@192.168.1.4

salle2=user@192.168.2.1 user@192.168.2.2 user@192.168.2.3 user@192.168.2.4

lshell

Limited shell

Permet de limiter les commandes qu'un compte peut lancer.

Installation

  sudo apt-get install lshell

ou bien en utilisant le paquet pour Debian / Ubuntu sur le site du développeur.

Paramétrage

Editer le fichier /etc/lshell.conf

Par exemple pour autoriser l'utilisateur light_user à ne passer que les commandes de mise à jour du poste (apt-get update et apt-get upgrade).

Il faut créer l'utilisateur light_user en lui mettant le shell lshell (éditer le fichier /etc/passwd et lui mettre le shell /usr/bin/lshell )

Puis éditer le fichier lshell.conf en ajoutant tout en bas :

[light_user]
allowed :['upgrade','update']
aliases :{'update':'sudo apt-get update', 'upgrade':'sudo apt-get upgrade'}
sudo_commands :['apt-get update', 'apt-get upgrade']
overssh         : ['update','upgrade']