Système

Vous trouverez ici quelques astuces pouvant être utiles pour un administrateur système.

Authentification SSH automatique par clé

Il peut vite devenir très fatiguant de taper son mot de passe à chaque connexion à distance en SSH, surtout lorsque, pour une raison ou une autre, on désire se connecter sur l'ensemble des ordinateurs des salles info au même moment.
Heureusement, le mot de passe n'est pas le seul moyen d'authentification possible lorsqu'on utilise SSH, qui peut également utiliser l'authentification par clé. Celle-ci a l'avantage d'être bien plus difficile à brute-forcer qu'un simple mot de passe en plus d'éviter d'avoir à le rentrer à chaque fois.
Le principe est simple, il s'agit de générer une paire clé publique/clé privée, la clé publique étant ajoutée à la liste des clés autorisées sur les ordinateurs sur lesquels on désire se connecter. La clé privée doit être conservée avec précaution, car c'est elle qui est utilisée par SSH pour vérifier l'authenticité de la connexion.
Maintenant que le principe est en place, procédons.
Générons la paire clé publique/clé privée à l'aide la commande ssh-keygen :

[toto@gen2 ~]$ ssh-keygen
Generating public/private rsa key pair.
 
Enter file in which to save the key (/home/toto/.ssh/id_rsa): Created directory '/home/toto/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/toto/.ssh/id_rsa.
Your public key has been saved in /home/toto/.ssh/id_rsa.pub.
The key fingerprint is:
b8:e4:ca:37:b9:ef:0d:84:35:17:2d:7c:05:72:66:59 toto@gen2

Il faut ensuite ajouter la clé publique aux clés autorisées sur le serveur distant.

ssh-copy-id user@host

Si la commande ssh-copy-id n'existe pas, il est possible d'utiliser la commande suivante :

cat ~/.ssh/id_rsa.pub | ssh user@host "cat - >> ~/.ssh/authorized_keys"

Et voilà !

Bench Apache

C'est bien connu, quand on fait quelque chose, c'est pour avoir la plus grosse.
Pour tester les performances de votre serveur web fraîchement installé et configuré, il existe un petit utilitaire fourni par Apache.
Celui-ci se trouve dans le paquet apache2-utils sous Debian, et apache-tools sous Gentoo.

La syntaxe est la suivante :
ab [options] [http[s]://]hostname[:port]/path
Quelques options utiles :
-n : nombre total de requêtes
-c : nombre de requêtes simultanées

Pour tester une page avec une requête POST (dans le cas d'un formulaire par exemple) il faut mettre le contenu de la requête post dans un fichier, puis utiliser les paramètres suivant :

cat login=toto&mdp=titi > post
ab -p post -T 'application/x-www-form-urlencoded' -n 5000  -c 100 http://host:port/page

La possibilité de générer les données au format GNUPlot vous permettra de pousser au bout le concours en faisant de jolis graphes.

Changer de fond toutes les n secondes

  1. j=0
  2.  
  3. for i in `find ~/.fluxbox/backgrounds -maxdepth 1 -type f`
  4. do
  5. nom[$j]=$i
  6. j=$[$j+1]
  7. echo $j $i
  8. done
  9.  
  10.  
  11. while true
  12. do
  13. fbsetbg -f ${nom[$[$RANDOM %$j]]}
  14.  
  15. sleep 5s
  16. done

ligne 5 : crée le tableau avec toutes les images (chemin)
ligne 7 : incrémente j

Comment avoir bash sur les pcs du SMIG?

C'est très simple il suffit de taper bash dans une console afin de charger le Bourne Again SHell. Mais alors comment on sort de bash ? et bien il suffit d'entrer la commande suivante : exit. Pour charger bash à chaque fois que tu te connectes sur un pc, il suffit d'ajouter la ligne suivante à ton .cshrc, qui est situé à la racine de ton compte (~/.cshrc) exec bash. Pour cela il existes 2 méthodes : ouvrir le .cshrc avec n'importe quel éditeur de texte (surtout pas avec open office) et rajouter la ligne ; ou alors pour les feignants :
echo exec bash >> .cshrc
A moins que tu préfère le C-like Shell, bash est quand même plus agréable à utiliser.

Configuration

Vous trouverez ici quelques exemples de configuration qui peuvent servir de point de départ pour configurer aux petits oignons son système.

Xterm

Mon fichier de configuration pour xterm (~/.Xdefaults)

XTerm*saveLines:2000
XTerm*background:black
XTerm*foreground:green
XTerm*font:10x20
XTerm*jumpScroll: off
XTerm*scrollKey: on
XTerm*scrollTtyOutput: off
XTerm*rightScrollBar: on
XTerm*scrollBar: on

nano

Ma conf de nano
A mettre dans le fichier ~/.nanorc
.nanorc

unset autoindent
set const
set smooth
set nohelp
set nowrap
set tabsize 4
set multibuffer
 
syntax "default"
color cyan      "#.*"
color cyan start="/\*" end="\*/"
color green "//.*"
 
 
syntax "Java source" "\.java"
color brightblue start="/\*\*" end="\*/"
color brightred "\<(boolean|byte|char|double|float|int|long|new|short|this|transient|void|public)\>"
color red "\<(if|else|while|do)\>"
color brightblack "\<(break|case|catch|continue|default|finally|for|return|switch|throw|try)\>"
color cyan "\<(abstract|static|private|class|extends|final|implements|import|instanceof|interface|native|package)\>"
color brightcyan "\<(true|false|null)\>"
color brightcyan "public.*\{"
color brightcyan "private.*\{"
color blue start="/\*" end="\*/"
color brightblue "/\*"
color brightblue "\*/"
color green "//.*"
color cyan "\([^\)]*\(" "\([^)]*\)" "\)[^\(]*\)"
 
 
syntax "Code C" "\.c|\.php"
#color cyan	"\((.+?)\)"
 
color cyan "\([^)]*\)"
color cyan      "#.*"
color brightred     "\<(int|long|char|float|void)\>"
color red       "\<(unsigned|signed|struct|typedef)\>"
color red       "\<(if|else|for|while|do|switch)\>"
color brightblue    "\<(printf|scanf)\>"
color brightred     "\<(\;|PRINTF)\>"
color magenta       "\<(0|1|2|3|4|5|6|7|8|9)\>"
color brightblack       "(==|!=|%|&)"
color brightblack       "\<(return|case|break|default)\>"
color brightblue    start="/\*" end="\*/"
color brightgreen   "##"
color green		"INFO"
color green "//.*"
 
 
syntax "LaTeX"      "\.tex"
color cyan          "\\documentclass|\\begin|\\end"
color brightred     "\\usepackage"
color magenta       "\\author|\\title|\\date|\\maketitle"
color brightblack   "\\and"
color brightgreen   "%.*"
color brightblue    "\<(abstract|article|letter|book|report|document)\>"
color brightcyan			start="\\section|\\subsection|\\subsubsection" end="\}"
 
 
syntax "code Cpp" "\.cpp"
color blue start="/\*" end="\*/"
color cyan      "#.*"
color red     "\<(int|long|char|float|void)\>"
color red       "\<(unsigned|signed|struct|typedef)\>"
color brightred       "\<(if|else|for|while|do|switch)\>"
color green "//.*"

Détacher un processus

Vous avez lancé une commande, elle prend plus de temps que prévu et vous aimeriez vous déconnecter de la machine tout en la laissant tourner en arrière plan ?

Voici comment faire avec Bash ou Zsh. Tout d'abord mettre en pause le processus courant en appuyant sur Control + z. Le processus est alors suspendu. Vous pouvez le relancer au premier plan en tapant fg (foreground) ou en arrière plan en tapant bg (background).

Il suffit donc le relancer en arrière plan. Mais en l'état actuel si vous vous déconnectez il sera tué car attaché à votre shell, qui sera passé de vie à trépas lors de votre connexion.
Pour éviter cela il faut demander au shell de renier le processus fils en tapant disown -h (ou simplement disown avec zsh).

Maintenant vous pouvez vous déconnecter et laisser tourner votre processus pendant ce temps-là.

Rebonds SSH

Il peut arriver que pour vous connecter à une machine à distance via SSH, vous soyez obligé de passer par une ou plusieurs machines de rebond avant de pouvoir atteindre votre but.
Le faire une fois ça va, par contre plusieurs fois devient fastidieux.

Ce merveilleux outil qu'est SSH vous propose donc une solution pour le faire automatiquement ! Il vous faudra tout de même installer netcat (commande nc) sur les serveurs de rebond.

Supposons que vous vouliez vous connecter à la machine m1 en passant par m2 puis m3, il suffit d'ajouter les lignes suivantes à la configuration de SSH dans ~/.ssh/config :

Host m1
ProxyCommand ssh -q m3 nc m1 22
 
Host m3
ProxyCommand ssh -q m2 nc m3 22

Bien sûr dans ce cas les noms m1, m2 et m3 sont résolubles sur toutes les machines concernées (pour faire simple).
Pour ne pas avoir à taper plusieurs mots de passe de suite je vous conseille de configurer l'authentification par clé successivement sur chaque machine.

Reboot on panic

Linux n'est pas infaillible, et parfois le kernel panique. Or si cela arrive sur un serveur dont la disponibilité est importante, il est plutôt utile que le serveur rédemarre tout seul au lieu de devoir le faire physiquement.

Pour ce faire il faut modifier le paramètre noyau kernel.panic à l'aide de la commande sysctl.
sysctl -w kernel.panic=60
La valeur de cette variable donnant le temps en secondes avant le rédemarrage du système après un kernel panic. Pour que cette valeur soit configurée à chaque démarrage, il suffit d'ajouter la ligne suivante au fichier /etc/sysctl.conf.

# Reboot on panic
kernel.panic = 60

Spécial gentoo

Nom du paquet auquel appartient un binaire

Pour récupérer le nom du paquet (atom) auquel appartient un fichier sur votre système, vous pouvez utiliser :

qfile le_bin

qfile fait parti de portage-utils

Il est aussi possible d'utiliser

equery belongs le_bin

equery fait partie de gentoolkit

à noter que portage-utils est écrit en C alors que equery est en python. Je vous laisse juge du plus rapide.

Tunnel inverse SSH

Problèmatique : vous êtes sur une machine non accessible directement de l'extérieur, et pourtant, vous voulez pouvoir vous y connecter depuis l'extérieur.

Moyens : Vous avez un accès SSH sur une autre machine accessible depuis l'extérieur.

Solution : le tunnel SSH inverse. Il s'agit d'ouvrir un tunnel sur la machine accessible depuis l'extérieur vers votre machine. Comme cela en vous connectant sur la machine ouverte vous pourrez ensuite rejoindre la vôtre (fermée).

Cela se fait de la façon suivante :

screen ssh -NTR 1025:localhost:22 host.name

Cette commande ouvre un tunnel sur la machine distante host.name qui relie le port 1025 sur cette machine au port 22 sur la machine locale.

Si vous appuyez sur Control+C ou quittez votre terminal, le tunnel sera fermé. Pour le conserver, il est judicieux de lancer la commande précédente dans un screen.

Il suffit ensuite d'utiliser la commande suivante pour accéder à votre machine.

 ssh user@localhost -p 1025

Note : le port de départ du tunnel (1025 ici) doit être supérieur à 1024 car en tant qu'utilisateur vous ne disposez pas des privilèges pour écouter sur un port inférieur ou égal à 1024.

ldapsearch les mails des membres du club

ldapsearch -h ldapix -b "ou=People,dc=clubnix,dc=org" | grep "^mail:" | cut -d" " -f2 | sort

de quelqu'un en particulier :

ldapsearch -h ldapix -b "ou=People,dc=clubnix,dc=org" "uid=login" | grep "^mail:" | cut -d" " -f2