42 votes

Meilleur système pour la gestion des clés SSH ?

J'ai plusieurs ordinateurs clients (par exemple des ordinateurs portables, des ordinateurs de bureau, etc.), et je me connecte à plusieurs machines serveur que je gère, et je me connecte à toutes via SSH. Je peux imaginer plusieurs schémas de gestion des clés ssh qui auraient du sens, et je suis curieux de savoir ce que font les autres.

Option 1: Une paire de clés publique/privée globale.

Je générais une paire de clés publique/privée, et mettrais la clé privée sur chaque machine cliente, et la clé publique sur chaque machine serveur.

Option 2: Une paire de clés par machine serveur.

Je générerais une paire de clés sur chaque machine serveur, et mettrais chaque clé privée sur mes machines clientes.

Option 3: Une paire de clés par machine cliente.

Chaque machine cliente aurait une clé privée unique, et chaque machine serveur aurait les clés publiques de chaque machine cliente à partir de laquelle je voudrais me connecter.

Option 4: Une paire de clés par paire client/serveur

Totalement exagéré ?

Lequel de ces options est le meilleur ? Y a-t-il d'autres options ? Quels critères utilisez-vous pour évaluer la bonne configuration ?

33voto

whoisjake Points 556

J'utilise Option 3: Une paire de clés par machine cliente et cela me semble être la meilleure solution. Voici quelques raisons :

  • Si un client est compromis, alors cette clé (et uniquement cette clé) doit être supprimée des serveurs.
  • C'est assez flexible pour décider de ce à quoi je peux accéder depuis où, sans accorder un accès général à tous les serveurs depuis tous les clients.
  • Très pratique. Il n'y a qu'une seule clé pour ssh-add, pas de confusion.
  • Facile à mettre en place et administrer par rapport à Option 4

Option 4 est bien, mais demande trop de travail. Option 3 vous permet d'atteindre 98% de l'objectif avec beaucoup moins d'ennuis.

30voto

WildJoe Points 2515

J'utilise une solution un peu plus compliquée mais très polyvalente car je veux maintenir une certaine séparation dans les clés d'identité SSH utilisées pour mes serveurs de réseau domestique, serveurs de bureau, serveurs de réseau de clients de consulting et autres systèmes variés sur lesquels j'ai des comptes.

Cela dit, je travaille principalement à partir de postes de travail Linux, donc j'ai une clé USB configurée avec un cryptage LUKS et mon gestionnaire de fenêtres X11 ainsi que le démon HAL détectent le lecteur crypté LUKS et demandent le mot de passe de déchiffrement lorsqu'il est inséré et qu'on tente de le monter. En stockant cela sur un lecteur crypté de la manière dont je le fais, je ne stocke jamais mes clés SSH sur aucun poste de travail.

Ensuite, j'ai la configuration suivante dans mon fichier ~/.ssh/config :

Host *
    Protocol 2
    IdentityFile %d/.ssh/keys.d/id_rsa.%l
    IdentityFile %d/.ssh/keys.d/id_dsa.%l
    IdentityFile %d/.ssh/keys.d/%u@%l

Le %d est traduit comme étant le répertoire personnel de l'utilisateur par OpenSSH et dans le répertoire ~/.ssh, j'ai créé keys.d comme un lien symbolique vers le chemin du répertoire sur la clé USB cryptée lorsqu'elle est correctement montée.

L'expression %l est traduite comme étant le nom de la machine cliente locale et %u sera traduit comme le nom d'utilisateur de la machine cliente locale.

Cette configuration permet à SSH de rechercher une clé en utilisant 3 expressions différentes. Par exemple, si le nom d'utilisateur de ma machine cliente locale était jdoe et le nom de la machine cliente locale était examplehost, il chercherait dans l'ordre suivant jusqu'à ce qu'il trouve une clé qui existe et qui est acceptée par le serveur distant.

/home/jdoe/.ssh/keys.d/id_rsa.examplehost
/home/jdoe/.ssh/keys.d/id_dsa.examplehost
/home/jdoe/.ssh/keys.d/jdoe@examplehost

Vous pourriez même utiliser l'expression %r pour rechercher une clé spécifique pour le nom d'utilisateur du serveur distant ou %h pour le nom d'hôte du serveur distant tout comme %u et %l ont été utilisés.

Mise à jour : Maintenant, j'utilise en fait le gpg-agent de GnuPG avec la compatibilité ssh-agent pour simplement lire et utiliser la clé d'authentification de ma carte à puce OpenPGP v2.

6voto

mcqwerty Points 2106

Je supprimerais vos deux options 1 (dont je soupçonne que l'une était censée être l'option 2 ;-) car les clés privées sont des données sensibles, et il est logique de les conserver dans le moins d'endroits possible. Personnellement, je ne copierais jamais une clé privée d'un ordinateur à un autre (ou même d'un fichier à un autre sur le même ordinateur), sauf peut-être pour faire des sauvegardes. Bien que contrairement à la plupart des clés de chiffrement, si une clé SSH est perdue ce n'est pas la fin du monde (il suffit d'en créer une nouvelle, vous ne perdez aucune donnée).

1voto

warren Points 12172

Option 3 et utilisez quelque chose comme Puppet pour gérer la gestion des clés.

1voto

pgs Points 3441

Option 3.

Cela vous permet également de contrôler auxquels des serveurs un client peut accéder. Par exemple, si le client X a besoin d'accéder aux serveurs A et B, mais pas C ou D, vous copiez sa clé publique uniquement sur ces hôtes.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X