De nos jours, je vois beaucoup de jeunes geeks (et des vieux aussi) se connecter en ssh à leur server unix avec un mot de passe faible... Avec les polonais, les marocains, les roumains qui prolifèrent sur le net à la recherche de serveurs vulnérables, il faut se protéger d'une façon plus importante. Voilà de quoi mettre en place un login via une paire de clés RSA. Et en bonus : comment configurer sshd pour refuser le login par mot de passe !

Créez vos clés RSA

Pour commencer, il faut générer une paire de clés RSA. En ligne de commande, c'est très simple :

$ ssh-keygen -t rsa -b 2048
Generating public/private rsa key pair.
Enter file in which to save the key (/home/SandRock/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): xxxxxxxxxx
Enter same passphrase again: xxxxxxxxxx
Your identification has been saved in /home/SandRock/.ssh/id_rsa.
Your public key has been saved in /home/SandRock/.ssh/id_rsa.pub.
The key fingerprint is:
xx:xx:xx:xx:xx:xx:xx:x:xx:x:x:x:x:x:x:x SandRock@Titan

$ ls ~/.ssh
id_rsa
id_rsa.pub

Le fichier nommé id_rsa est la clé privée et le id_rsa.pub est la clé publique. Il est indispensable de garder la clé privée en sécurité (sur une partition chiffrée par exemple).

Sous Windows, un utilitaire est disponible avec PuTTY, nommé PuTTYGen. Il permet de générer les même clés (mais le format des fichiers est différent du format obtenu avec ssh_keygen). Ne pas oublier de bien choisir une clé de type RSA avec 2048 bits.

PuTTYGen

Utilisation

Maintenant que votre paire de clés est prête, il faut déclarer sur les machines distantes quelles clés sont autorisées à se connecter. Pour cela, un fichier nommé ~/.ssh/authorized_keys contiendra les clés publiques (1 par ligne) au format du fichier id_rsa.pub (ça commence par 'ssh-rsa AAAA...'). Quelques commandes pour faire ça facilement :

$ echo "ssh-rsa AAAxxxxxxx" >> ~username/.ssh/authorized_keys // ajoute une clé au fichier par copié/collé dans une console
$ cat ~/.ssh/id_rsa.pub | ssh you@example.com "cat - >> ~/.ssh/authorized_keys"  // ajoute une clé via ssh (mot de passe distant requis)

Désormais, la simple commande ssh me@exemple.com vous authentifiera automatiquement (la passphrase de votre clé privée sera demandée) sans mot de passe. Sous Windows avec PuTTY, il faut spécifier dans les options l'emplacement de votre clé privée dans la page Connection/SSH/Auth (il faut un fichier .pkk généré par PuTTYGen).

Interdire le login par mot de passe sur vos serveurs

Attention, procéder à une telle configuration empèchera le login par mot de passe ! Si vous perdez vos clés privées, il faudra intervenir de façon physique sur le serveur pour configurer une nouvelle clé ! Prennez donc la précaution de posséder une double paire de clés stockées dans des emplacements différents. Testez aussi le bon fonctionnement du login par clé avant de faire cette manipulation.

Ouvrez simplement le fichier /etc/ssh/sshd_config avec votre éditeur favori. Cherchez la ligne commençant par PasswordAuthentication (cette ligne peut ne pas exister ou peut être commentée).

# Change to no to disable tunnelled clear text passwords
PasswordAuthentication no

Voilà qui est fait. Tout brute-force de mot de passe sera impossible.

$ ssh root@exemple.com
Permission denied (publickey).
Disconnected: No supported authentication methods available.