Clés SSH

Principe

Vous pouvez vous connecter en SSH sur un serveur et vous authentifier avec un mot de passe. Seulement, vous pouvez en avoir marre de taper votre mot de passe à rallonge. Il y a même certains cas où le mot de passe du compte n'est pas connu, voire même que l'authentification par mot de passe est désactivée (pour éviter de se faire bruteforcer par un coréen qui s'ennuie par exemple). L'authentification par clés SSH est donc nécessaire.

Les clés SSH sont des sortes de mots de passe longs et aléatoires, possiblement protégées par un mot de passe. Le but de cette pratique est de s'assurer que personne d'autre que vous ne peut utiliser votre compte. Si l'authentification par clés SSH est le seul moyen d'accéder à un serveur, cela permet de filtrer efficacement les accès au serveur.

L'authentification par une clef SSH (elle même protégée par une passe-phrase) permet ce qu'on appelle l'authentification forte. En effet, vous êtes authentifié par ce que vous possédez (la clef SSH) et ce que vous savez (la passe-phrase). Quelqu'un qui possède votre clef SSH sans la passe-phrase (ou l'inverse) ne pourra pas s'authentifier sur votre compte.

Le principe : le client génère une paire de clés, une clé publique et une clé privée. La clé publique est envoyée sur le serveur. Quand le client s'authentifie avec sa clé privée, le serveur regarde s'il a une clé publique qui correspond à cette clé privée. Si c'est le cas, le client est autorisé à s'authentifier avec sa clé privée.

Windows

Pour les utilisateurs de Windows, on va préférer PuTTY, c'est le plus simple à utiliser. La première chose à faire est de télécharger PuTTY : dans la section “For Windows on Intel x86”, vous téléchargez “putty.exe”, et vous êtes bon pour l'installer ensuite.

Si vous avez installé Babun (ce que vous devriez faire sinon), suivez les instructions pour Linux dans la console.

Génération des clés SSH

Sur cette même page, téléchargez “puttygen.exe” dans la section “For Windows on Intel x86”. PuTTYgen servira uniquement lors de la génération des clés SSH. Lancez PuTTYgen.

En bas à droite, changez le nombre de bits de la clé de 1024 en 4096 (comme on dit, plus c'est gros et meilleur c'est hein). Cliquez ensuite sur “Generate” et, comme ça vous l'est si gentiment demandé, faites des mouvements aléatoire avec votre souris dans la zone vide en-dessous de la barre de progression afin de l'aider dans la génération de l'aléatoire.

La clé publique est générée. Remplacez le “Key comment” par votre nom d'utilisateur, éventuellement avec une indication sur la machine qui aura cette clé privée : par exemple, toto-fixe ou paulo_travail.
La passphrase est ce que vous taperez, dorénavant, pour vous connecter à votre compte. N'oubliez surtout pas d'en choisir une (sinon, votre clé SSH sera sans protection, et n'importe qui qui allumera votre ordinateur pourra l'utiliser à votre place…), et un minimum compliquée (avec des lettres, des chiffres, des caractères de ponctuation). Vos clés SSH sont prêtes !

  • la clé privée : “Save private key” sauvegardera la clé privée, choisissez un de vos dossiers personnels dans Windows (pas un dossier en partage avec les éventuels autres utilisateurs de l'ordinateur…), typiquement “Documents”, sous le nom “cle.ppk” par exemple. Une fois sauvegardée, rendez-vous dans ce dossier, faites un clic droit sur le fichier de la clé privée, choisissez “Propriétés”, et cochez la case “Fichier caché” puis validez. Ainsi, votre clé est protégée contre tous les utilisateurs un peu trop curieux.
  • la clé publique : cette clé sera collée dans le fichier ~/.ssh/authorized_keys de votre compte sur le serveur. Ainsi que vous l'explique PuTTYgen, sélectionnez ce qui a été généré (dans l'encadré dans la partie supérieure) avec la souris, copiez/collez ceci dans votre éditeur de texte favori (bloc-notes, Notepad++, …). Enregistrez ceci dans un nom compréhensible, par exemple cle.pub. Enfin, il faut envoyer cette clé publique sur le serveur (en vous authentifiant par mot de passe, ou en contactant un administrateur du serveur en question) et la mettre dans le fichier ~/.ssh/authorized_keys (par un echo “votre_cle” » ~/.ssh/authorized_keys par exemple).

Vous pouvez maintenant supprimer puttygen.exe et passer à l'étape suivante…

Se connecter

Pour vous connecter à votre compte, il faut utiliser PuTTY. Lancez-le et décocher la case qui vous demande (sous Windows >XP) si vous voulez être prévenu à chaque exécution de PuTTY, sinon vous allez vite devenir fou.

Nous allons créer un profil afin de sauvegarder nos préférences.

  1. Section Session : l'Host name sera, par exemple pour vous connecter à votre compte perso.iiens.net; <nom2042>@perso.iiens.net ;
  2. Section Windows/Translation : sélectionnez UTF-8 dans le menu déroulant ;
  3. Section Connection/SSH/Auth : allez chercher votre clé privée (qui est cachée donc invisible) : “Browse”, entrez dans le bon dossier et tapez le nom de votre clé (c'était “cle.ppk” dans mon exemple). Enfin, “Ouvrir” ;
  4. Revenez dans Session : dans la ligne “Saved Sessions”, entrez un nom explicite (par exemple perso_arise), et cliquez sur “Save”.

Il vous suffit de double-cliquer sur le nom de la session pour lancer la connexion SSH sur votre compte. Vous serez invité à entrer votre passphrase.

Ça y est, vous êtes connecté ! Si ça ne marche pas, soit une des étapes précédentes n'a pas été validée correctement, soit vous vous trompez de clé privée, soit vous utilisez votre clé publique en tant que clé privée. Quoiqu'il en soit, n'hésitez pas à vous renseigner sur Google ou auprès d'un IIEn qui se débrouille mieux que vous 😉

Linux, BSD, Mac

Pour les autres, il y a OpenSSH. Que vous soyez sous Linux, BSD ou Mac, il vous faut tout d'abord installer openssh via votre manager de paquet préféré : synaptics sous Ubuntu/Debian (aptitude ou apt-get en ligne de commande), packagekit sous Fedora (yum en ligne de commande), j'ai pas de Mac ni de BSD, donc bon courage.

Une fois que c'est fait, il vous faut ouvrir un terminal, une ligne de commande quoi. Tapez ensuite cette commande :

ssh --help

Si ça vous sort l'utilisation de ssh, c'est que vous l'avez correctement installé 1) :

usage: ssh [-1246AaCfgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec]
           [-D [bind_address:]port] [-e escape_char] [-F configfile]
           [-I pkcs11] [-i identity_file]
           [-L [bind_address:]port:host:hostport]
           [-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port]
           [-R [bind_address:]port:host:hostport] [-S ctl_path]
           [-W host:port] [-w local_tun[:remote_tun]]
           [user@]hostname [command]

Au contraire, si vous avez un message qui vous dit que la commande n'est pas trouvée, alors il faut le réinstaller 2) :

bash: command not found: ssh

Dans ce dernier cas, vous n'avez pas installé OpenSSH, il va falloir faire un petit effort et aller demander à Google un peu plus de renseignements…

Génération des clés SSH

Bien, maintenant, si vous êtes ici, c'est que vous avez la comande ssh disponible. Une autre commande installée aux côtés de ssh est ssh-keygen, et c'est celle-ci qui va nous permettre de générer les clés SSH qui permettront par la suite de se connecter à votre compte.

La commande est simple 3) :

ssh-keygen -t rsa -b 4096

Vous verrez alors apparaitre un texte de la forme suivante :

Generating public/private rsa key pair.
Enter file in which to save the key (/home/UTILISATEUR/.ssh/id_rsa):

/home/UTILISATEUR/.ssh/id_rsa est le nom du fichier par défaut dans lequel votre clé SSH sera enregistrée. Si vous n'avez jamais fait cette procédure, vous pouvez laisser la valeur par défaut (c'est aussi le fichier utilisé par défaut par la suite), mais si ce n'est pas votre première génération de clé, vous voudrez sans doute changer ce fichier.
Bref, libre à vous de choisir, mais ce sera plus simple pour la suite si vous laissez la valeur par défaut.

Une fois que vous avez appuyé sur la touche <Entrée> (<Enter> pour les anglicistes), vous voyez apparaitre cette ligne :

Enter passphrase (empty for no passphrase):

C'est ici que vous rentrez votre mot de passe qui protégera votre clé SSH (et c'est plutôt mieux de pas le laisser vide). Ensuite, vous rentrez ce mot de passe une deuxième fois (pour être sûr que vous ayez pas la polio).

Voilà, la génération de vos clés SSH est terminée. Vous vous retrouvez donc avec une paire de clés SSH :

  • une clé privée : le fichier que vous avez renseigné auparavant (/home/UTILISATEUR/.ssh/id_rsa par défaut) ;
  • une clé publique : le fichier que vous avez renseigné auparavant affublé de l'extension .pub (/home/UTILISATEUR/.ssh/id_rsa.pub par défaut).

Enfin, il faut envoyer votre clé publique (⚠ le fichier que vous avez rentré tout à l'heure avec l'extension .pub à la fin ⚠) sur le serveur (en vous authentifiant par mot de passe, ou en contactant un administrateur du serveur en question) et la mettre dans le fichier ~/.ssh/authorized_keys (echo “votre_cle” » ~/.ssh/authorized_keys par exemple).

Se connecter

Pour vous connecter à votre serveur, vous pouvez utiliser la commande suivante (oui, encore en ligne de commande) :

ssh nom_utilisateur@votre_serveur.tld

ou, si vous n'avez pas laissé le fichier par défaut :

ssh -i /chemin/vers/la/clé/privée-sans/.pub/donc nom_utilisateur@votre_serveur.tld

Si la connection échoue, sur Linux/Mac OS, il est possible que vous deviez faire: (SSH rejette les clefs trop permissives)

chmod 400 <votre_clef_privée>

Si ça ne marche pas, soit une des étapes précédentes n'a pas été validée correctement, soit vous vous trompez de clé privée, soit vous utilisez votre clé publique en tant que clé privée. Quoiqu'il en soit, n'hésitez pas à vous renseigner sur Google ou auprès d'un IIEn qui se débrouille mieux que vous 😉

1)
ce n'est pas forcément exactement ce qui va s'afficher chez vous, mais c'est l'idée
2)
de même que pour la remarque précédente, ce n'est pas forcément exactement le message, mais c'est l'idée
3)
man ssh-keygen vous expliquera les options mieux que moi, libre à vous de changer les options/valeurs