Comment utiliser SSH en toute sécurité avec Kryptonite sur DigitalOcean

introduction

SSH est le principal moyen de se connecter aux serveurs Linux distants. La sécurisation de ce canal est essentielle pour maintenir une infrastructure sécurisée. Le moyen le plus courant de s'authentifier sur un serveur distant via SSH consiste à utiliser des paires de clés publique / privée. Ajoutez la clé publique à la liste des clés autorisées sur le serveur distant et vous êtes prêt à commencer.

La question la plus difficile est de savoir comment stocker votre clé privée en toute sécurité.

En règle générale, les développeurs stockent leurs clés privées dans le répertoire~/.ssh. Cependant, vous pouvez lire votre clé privée avec une simple commandecat ~/.ssh/id_rsa. Toute application de votre ordinateur peut potentiellement lire votre clé privée SSH, même si elle est chiffrée avec une phrase secrète.

Une solution courante à ce risque de sécurité consiste à ajouter un deuxième facteur (c.-à-d. activation demulti-factor authentication, or MFA). L’inconvénient est double: coût d’installation et facilité d’utilisation. Pour chaque serveur que vous créez, vous devez configurer le serveur OpenSSH pour utiliser le module PAM OATH-TOTP et y charger le secret partagé. C'est un processus qui prend du temps et il y a beaucoup d'endroits où faire des erreurs. De plus, chaque fois que vous connectez SSH à un serveur, vous devez ouvrir une application sur votre téléphone, lire un code à six chiffres et le saisir dans votre terminal. Cela peut considérablement ralentir votre flux de travail.

Pour éviter les inconvénients de la configuration de MFA, les développeurs utilisent souvent des modules de sécurité matériel USB (HSM), tels que NitroKey ou YubiKey, pour générer et stocker des paires de clés public-privé SSH. Ce sont de petits périphériques USB qui contiennent votre paire de clés SSH. Chaque fois que vous souhaitez connecter un serveur SSH à un serveur, vous connectez le périphérique USB à votre ordinateur et appuyez sur un bouton du périphérique.

Mais les HSM sont chers. Les appareils compatibles SSH coûtent jusqu'à 50 USD. C’est encore un autre périphérique à transporter et chaque fois que vous faites un SSH sur un serveur, vous devez brancher un périphérique USB sur votre ordinateur et appuyer sur un bouton physique dessus. De plus, les HSM USB n’ont généralement pas d’écran d’affichage. Par conséquent, vous ne savez pas quel identifiant vous souhaitez réellement approuver et il n’ya aucun moyen d’afficher un journal d’audit sur ce que vous avez authentifié.

Kryptonite est une nouvelle solution pour protéger votre clé privée SSH. C’est gratuit, facile à configurer, convivial et intègre des protections de sécurité supplémentaires. Il ne nécessite aucune modification côté serveur et vous permet d'approuver les demandes de connexion via des notifications push à votre téléphone (sans ouvrir une application). Les hôtes connus sont toujours avec vous sur votre téléphone, quel que soit l'ordinateur ou le serveur sur lequel vous êtes en SSH.

Dans ce guide, vous allez générer une paire de clés SSH avec Kryptonite sur votre téléphone, associer votre téléphone à votre ordinateur local et utiliser Kryptonite à SSH dans un droplet DigitalOcean.

Conditions préalables

Pour suivre ce guide, vous aurez besoin de:

  • Un seul Droplet DigitalOcean exécutant n’importe quelle distribution Linux.

  • Un smartphone: iPhone (iOS 9.1 ou supérieur) ou un Android (6.0 ou supérieur).

  • Un ordinateur personnel exécutant macOS (10.10 ou supérieur), Ubuntu, Debian, RHEL, CentOS, Fedora ou Kali Linux.

[[step-1 -—- generation-a-kryptonite-key-pair]] == Étape 1 - Génération d'une paire de clés de kryptonite

La première étape consiste à télécharger l'application Kryptonite en accédant àget.krypt.co sur votre téléphone iOS ou Android.

Une fois l'application installée, ouvrez-la et appuyez surGenerate Key Pair pour créer votre paire de clés Kryptonite SSH. Entrez un email si vous souhaitez identifier votre clé publique avec elle (ou ignorer cette étape).

Ensuite, vous devrez installer l’utilitaire de ligne de commande de Kryptonite.

[[step-2 -—- Installing-kr]] == Étape 2 - Installation dekr

La prochaine étape se poursuit sur votre ordinateur local. Vous devrez installer leskr command line utility, ce qui permet à SSH de s’authentifier avec une clé stockée dans Kryptonite. Vous pouvez installerkr avec votre gestionnaire de paquets préféré (commenpm ou`brew) or simply use `curl, comme nous le ferons ici.

Pour des raisons de sécurité, si vous souhaitez inspecter le script d'installation avant l'installation, vous pouvez exécutercurl https://krypt.co/kr > install_kr et y jeter un œil. Vous pouvez en savoir plus sur son fonctionnement et les autres méthodes d'installation dansthe kr documentation.

Lorsque vous êtes prêt, installezkr.

curl https://krypt.co/kr | sh

Vous serez invité à activer les notifications push. Cela est nécessaire pour que Kryptonite envoie des demandes d'approbation de connexion via des notifications push.

Maintenant que vous avez l'application, une paire de clés etkr, l'étape suivante consiste à jumeler votre ordinateur avec Kryptonite.

[[step-3 -—- pairing-kryptonite-with-your-computer]] == Étape 3 - Couplage de la Kryptonite avec votre ordinateur

Une fois quekr est correctement installé, exécutez:

kr pair

Un code QR apparaîtra dans le terminal. Si la fenêtre de votre terminal est petite, vous devrez peut-être l'agrandir pour que tout le code QR soit visible ou réduire la taille de la police.

Dans l'application Kryptonite, appuyez surAllow Camera Access en bas de l'écran. Une fois que la caméra apparaît, scannez le code QR dans le terminal. Au bout de quelques secondes, l'application Kryptonite affiche un couplage réussi et le terminal imprime votre clé publique Kryptonite SSH.

Testons que cette paire de clés fonctionne.

[[step-4 -—- testing-ssh-with-kryptonite]] == Étape 4 - Test SSH avec Kryptonite

Pour vérifier que tout fonctionne, essayez SSHing sur le serveur publicme.krypt.co:

ssh me.krypt.co

Vous remarquerez qu'une demande apparaît sur l'application Kryptonite vous demandant d'approuver une authentification SSH avec trois options:

  • Allow Once n'approuve que cette seule demande de connexion àme.krypt.co.

  • Allow for 1 hour approuve cette demande et toutes les autres demandes de connexion SSH de l'ordinateur couplé pendant l'heure suivante. Vous serez toujours informé lorsque ces connexions auront lieu, mais elles seront automatiquement approuvées.

  • Reject rejette cette demande et la connexion SSH échoue (ou revient aux clés locales) sur votre ordinateur.

Appuyez surAllow Once. Vous verrez une connexion SSH réussie àme.krypt.co, qui sortira rapidement du pseudo-shell et affichera le logo du bouclier.

Si vous verrouillez votre appareil et essayez à nouveau de SSH dansme.krypt.co, il enverra une notification push à votre appareil avec la commande prévue, vous demandant votre approbation depuis l'écran de verrouillage.

[[step-5 -—- ajoutant-your-kryptonite-pubkey-to-digitalocean]] == Étape 5 - Ajout de votre Kryptonite Pubkey à DigitalOcean

Maintenant que Kryptonite est associé à votre ordinateur, vous pouvez rapidement ajouter votre clé publique à tous les serveurs et outils que vous utilisez via SSH.

Pour ajouter votre clé publique à DigitalOcean, exécutez la commande suivante:

kr digitalocean

Vous verrez une sortie avec des instructions spécifiques à DigitalOcean, comme ceci:

OutputPublic key copied to clipboard.
Press ENTER to open your web browser to DigitalOcean.
Then click “Add SSH Key” and paste your public key.

C’est ce que vous devrez faire ensuite:

  1. Appuyez surENTER depuis votre terminal pour accéder automatiquement à votre page de paramètres DigitalOcean, en vous connectant si nécessaire.

  2. Cliquez surAdd SSH Key.

  3. Collez dans votre clé publique Kryptonite.

  4. Cliquez surSave.

Vous pouvez trouver des instructions détaillées sur l'ajout de votre clé SSH dansStep 3 of this SSH on DigitalOcean tutorial.

Le téléchargement de votre clé dans DigitalOcean facilite son ajout à un nouveau Droplet. Sélectionnez simplement la case correspondant à votre clé Kryptonite lorsque vous créez le serveur. Ensuite, ajoutons cette clé à un Droplet existant.

[[step-6 -—- ajoutant-votre-kryptonite-pubkey-to-an-existing-droplet]] == Étape 6 - Ajout de votre Kryptonite Pubkey à un droplet existant

L'outil de ligne de commandekr peut être utilisé pour ajouter votre clé publique Kryptonite à un Droplet déjà en cours d'exécution auquel vous avez accès avec une clé SSH locale ou un mot de passe.

Exécutez la commande suivante pour ajouter votre clé publique Kryptonite au fichier des utilisateurs autorisés de Droplet, en vous assurant de le remplacer par votre nom d’utilisateur et l’adresse IP de votre Droplet.

kr add [email protected]_server_ip

Une fois que vous avez terminé, vérifiez que cela fonctionne en essayant de SSH dans.

ssh [email protected]_server_ip

Vous recevrez une demande de connexion Kryptonite SSH sur votre téléphone.

Conclusion

Maintenant que vous avez configuré Kryptonite et ajouté avec succès votre clé publique Kryptonite à votre compte DigitalOcean, vous pouvez maintenant SSH dans n’importe quel de vos gouttelettes à partir de n’importe quel ordinateur couplé.

Votre clé privée est stockée de manière sécurisée sur votre téléphone et ne quitte jamais votre appareil. Lorsque vous autorisez une demande, la clé privée est utilisée pour signer de manière cryptographique un nonce de connexion SSH localement sur votre appareil. Cette signature est ensuite renvoyée sur votre ordinateur pour compléter l'authentification SSH.

Pour plus d'informations sur le fonctionnement de la Kryptonite, jetez un œil àKryptonite’s system architecture blog post et auxKryptonite and kr source code.