Table des matières
Shells
Liens
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']