{"id":1600,"date":"2015-04-25T00:46:59","date_gmt":"2015-04-24T22:46:59","guid":{"rendered":"https:\/\/www.fanjoe.be\/?p=1600"},"modified":"2015-07-09T20:45:05","modified_gmt":"2015-07-09T18:45:05","slug":"raspberry-pi-authentification-ssh-par-certificat","status":"publish","type":"post","link":"https:\/\/www.fanjoe.be\/?p=1600","title":{"rendered":"Raspberry Pi : Authentification SSH par certificat"},"content":{"rendered":"<h1>Introduction<\/h1>\n<p>Par d\u00e9faut, lorsque nous nous connectons \u00e0 notre Raspberry Pi en SSH, nous nous identifions par l&rsquo;interm\u00e9diaire d&rsquo;un login \/ mot de passe.<\/p>\n<p>Nous avons vu dans <a href=\"https:\/\/www.fanjoe.be\/?p=1009\" target=\"_blank\">l&rsquo;article consacr\u00e9 \u00e0 fail2ban<\/a> que de nombreuses machines tentaient de se logger \u00e0 notre serveur en testant de nombreuses combinaisons d&rsquo;identification par force brute.<\/p>\n<p>Pour parer \u00e0 l&rsquo;\u00e9ventualit\u00e9 ou un pirate r\u00e9ussirait \u00e0 trouver notre mot de passe, nous allons le d\u00e9sactiver et le remplacer par un certificat sous forme de clef priv\u00e9e, clef publique.<\/p>\n<h1>Mise en place<\/h1>\n<h2>G\u00e9n\u00e9ration de la paire de clefs<\/h2>\n<p>Sur le client, nous allons g\u00e9n\u00e9rer une paire de clefs (priv\u00e9e, publique) qui nous servira \u00e0 nous connecter sur tous nos serveurs.<\/p>\n<p>Il est pr\u00e9f\u00e9rable de r\u00e9aliser cette op\u00e9ration sur le client pour \u00e9viter de transf\u00e9rer la clef priv\u00e9e vers le serveur ou d&rsquo;y laisser sa trace.<\/p>\n<p>Nous garderons donc notre clef priv\u00e9e bien au chaud sur notre ordinateur et enverrons uniquement la clef publique sur tous nos serveurs.<\/p>\n<p>Pour commencer, dans le Terminal du client nous allons taper ceci :<\/p>\n<pre>$ ssh-keygen -t rsa -C \"MonNom@MonOrdinateur\"<\/pre>\n<p>\u00ab\u00a0MonNom@MonOrdinateur\u00a0\u00bb est un commentaire. Vous pouvez mettre ce que vous voulez. Il vous servira \u00e0 rep\u00e9rer votre clef publique parmi d&rsquo;autres dans le fichier ~\/.ssh\/authorized_keys que nous cr\u00e9erons plus tard sur le serveur.<\/p>\n<p>La commande vous demandera d&rsquo;indiquer le nom du fichier dans lequel sauver les clefs :<\/p>\n<pre>Generating public\/private rsa key pair.\r\nEnter file in which to save the key (\/Home\/<strong>User<\/strong>\/.ssh\/id_rsa):<\/pre>\n<p>Faites juste [ENTER]. La clef sera g\u00e9n\u00e9r\u00e9e et plac\u00e9e dans le dossier <code>.ssh\/id_rsa<\/code> (cach\u00e9) de l&rsquo;utilisateur courant du client qui g\u00e9n\u00e8re les clefs.<\/p>\n<p>Vous devrez ensuite choisir une phase de passe associ\u00e9e \u00e0 votre paire de clef. Elle vous sera demand\u00e9e lors de chaque connexion au serveur pour valider votre clef. Elle doit faire entre 10 et 30 caract\u00e8res.<br \/>\nVous pouvez vous en passer en faisant [Enter].<\/p>\n<pre>Enter passphrase (empty for no passphrase):<\/pre>\n<p>Entrez la phrase de passe une seconde fois pour confirmer qu&rsquo;il n&rsquo;y a pas de faute de frappe.<\/p>\n<pre>Enter same passphrase again:<\/pre>\n<p>Et la paire de clefs est g\u00e9n\u00e9r\u00e9e.<\/p>\n<pre>Your identification has been saved in id_rsa.\r\nYour public key has been saved in id_rsa.pub.\r\nThe key fingerprint is:\r\nad:cd:d8:b8:73:23:e1:13:a6:49:ad:42:a6:d5:d8:c7 MonNom@MonOrdinateur\r\nThe key's randomart image is:\r\n+--[ RSA 2048]----+\r\n|\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 |\r\n|\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 |\r\n|\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 |\r\n|\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 .\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 |\r\n|\u00a0\u00a0\u00a0\u00a0 + oS .\u00a0\u00a0\u00a0\u00a0\u00a0 |\r\n|\u00a0\u00a0\u00a0 = + EB\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 |\r\n|\u00a0\u00a0 = . B+o+\u00a0\u00a0\u00a0\u00a0\u00a0 |\r\n|\u00a0 . . + =.o\u00a0\u00a0\u00a0\u00a0\u00a0 |\r\n|\u00a0\u00a0\u00a0\u00a0 .\u00a0 .= .\u00a0\u00a0\u00a0\u00a0 |\r\n+-----------------+<\/pre>\n<h2>Ajout de la clef publique au fichier authorized_keys du serveur<\/h2>\n<p>Nous allons maintenant ajouter notre clef publique au fichier <code>authorized_keys<\/code> situ\u00e9 dans le dossier <code>\/home\/<strong>user<\/strong>\/.ssh<\/code> du serveur pour permettre \u00e0 chaque utilisateur de s&rsquo;identifier avec sa clef priv\u00e9e. Ici, par d\u00e9faut, <strong><code>user<\/code><\/strong> pourrait \u00eatre l&rsquo;utilisateur <strong><code>pi<\/code><\/strong>.<\/p>\n<p>Le fichier <code>authorized_keys<\/code> peut contenir plusieurs clef publiques. Par exemple, si vous avez une clef pour chaque ordinateur qui s&rsquo;y connecte. Ceci permet de supprimer une clef publique lorsque son pendant priv\u00e9 a \u00e9t\u00e9 compromis.<\/p>\n<p>Depuis le client; on tape :<\/p>\n<pre>$ cat ~\/.ssh\/id_rsa.pub | ssh &lt;USERNAME&gt;@&lt;IP-ADDRESS&gt; 'cat &gt;&gt; ~\/.ssh\/authorized_keys'<\/pre>\n<p>Une ligne sera ajout\u00e9e au fichier ~\/.ssh\/authorized_keys sur le serveur sous la forme :<\/p>\n<pre>ssh-rsa &lt;TRES LONGUE CLEF CRYPTOGRAPHIQUE&gt; MonNom@MonOrdinateur<\/pre>\n<h2>Configuration de SSH Deamon (sshd)<\/h2>\n<p>Nous allons \u00e9diter le fichier de configuration de sshd :<\/p>\n<pre>$ sudo nano \/etc\/ssh\/sshd_config<\/pre>\n<p>Dans le fichier, nous allons d\u00e9-commenter les lignes suivantes :<\/p>\n<pre>PubkeyAuthentication yes\r\nRSAAuthentication yes\r\nAuthorizedKeysFile\u00a0\u00a0\u00a0\u00a0\u00a0 %h\/.ssh\/authorized_keys<\/pre>\n<p>On enregistre le fichier et on red\u00e9marre ssh :<\/p>\n<pre>$ sudo service ssh restart<\/pre>\n<p>Si tout s&rsquo;est bien pass\u00e9, vous devriez pouvoir vous connecter sans entrer de mot de passe.<\/p>\n<p>Vous pouvez r\u00e9\u00e9diter le fichier <code>sshd_config<\/code> et modifier la ligne <code>PasswordAuthentication<\/code> en rempla\u00e7ant <strong>yes<\/strong> par <strong>no<\/strong> :<\/p>\n<pre>$ sudo nano \/etc\/ssh\/sshd_config<\/pre>\n<pre>PasswordAuthentication no<\/pre>\n<h1>Notes<\/h1>\n<p>Sur le serveur, le dossier <code>\/home\/<\/code> de chaque utilisateur est indiqu\u00e9 dans le fichier <code>\/etc\/passwd<\/code>.<\/p>\n<p>Ceci vous donnera une indication pour des utilisateurs particuliers comme : <code>root<\/code>, <code>www-data<\/code>, &#8230;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introduction <\/p>\n<p>Par d\u00e9faut, lorsque nous nous connectons \u00e0 notre Raspberry Pi en SSH, nous nous identifions par l&rsquo;interm\u00e9diaire d&rsquo;un login&#8230;<\/p>\n","protected":false},"author":1,"featured_media":1601,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[10,3,178,12],"tags":[162,170],"class_list":["post-1600","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-geek","category-informatique","category-mac","category-raspberrypi","tag-certificat","tag-ssh","end"],"jetpack_publicize_connections":[],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/www.fanjoe.be\/wp-content\/uploads\/2015\/04\/SSH-Certificat-00.gif","_links":{"self":[{"href":"https:\/\/www.fanjoe.be\/index.php?rest_route=\/wp\/v2\/posts\/1600","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.fanjoe.be\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.fanjoe.be\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.fanjoe.be\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.fanjoe.be\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1600"}],"version-history":[{"count":0,"href":"https:\/\/www.fanjoe.be\/index.php?rest_route=\/wp\/v2\/posts\/1600\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.fanjoe.be\/index.php?rest_route=\/wp\/v2\/media\/1601"}],"wp:attachment":[{"href":"https:\/\/www.fanjoe.be\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1600"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.fanjoe.be\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1600"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.fanjoe.be\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1600"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}