Un pense-bête

Trucs de geek : SSH sans mot de passe

Pour une fois j'ai trouvé un guide clair concernant les notions de clés publiques et privées et de leur utilisation dans la gestion des serveurs.

L'utilité des clés privées et publiques apparait entre autre lorsque vous souhaitez accéder d'une machine à une autre en ssh pour y copier des fichiers ou en récupérer d'autres en ftp. Le soucis dans ces cas là et que vous devez saisir un mot de passe, ce qui est mal aisé dans une script.


Une des solutions consiste à utiliser Putty et ses utilitaires pftpd qui permet justement du secure ftp sans avoir à saisir le mot de passe sous la console.
L'autre solution consiste à échanger les clés publiques entre machines. On parle de chiffrement asymétrique ou chiffrement à clé publique. Dans ce type de chiffrement l'émetteur d'un message utilise la clé publique et le destinataire utilisera la clé privée pour pouvoir lire le message.

La procédure consiste à :

  • générer ses clés : une privée et une publique
  • copier sur le serveur la clé publique (diffusion en terme technique)
  • les ajouter aux clés connues du serveur

Génération de la clés

$ ssh-keygen (Ne pas saisir de phrase clé sinon il vous faudra la saisir au clavier chaque fois que le système devra y accéder)


qui vous génére deux fichiers dans ~\.ssh\

  • id_rsa : la clé privée
  • id_rsa.pub : la clé publique

La diffusion : c'est tout bête il suffit de la copier sur le serveur cible par un classique scp

$ scp ~/.ssh/id_rsa.pub root@mon_servuer:/root

Ajout au système cible : Il faut l'ajouter au fichier

$  cat id_rsa.pub >> .ssh/authorized_keys

N'oubliez pas de la supprimer :

$ rm id_rsa.pub

et de rendre le fichier authorized_keys lisible par l'utilisateur et son groupe.

Dans la pratique la connexion sur le serveur distant va consister en un échange de données crythée entre les machines concernées afin de vérifier que le client qui tente la connexion est bien celui qu'il prétend être.

  • Le client tente donc un connexion sur le serveur en ssh
  • Le client envoie sa clé publique
  • Le serveur la reconnait
  • Il génére un nombre, le crypthe et l'adresse au client
  • Le client décrypthe le nombre ainsi transmis. Comme il posséde la  clé privée associée à la clé publique utilisée, il est le seul à pouvoir décrypther le nombre
  • Le client demande la phrase secréte si vous en avez indiqué une
  • vous la saisissez ou vous l'avez exporté dans vos varialbles globales
  • le client retourne le nombre décrythé au serveur
  • Le serveur compare ce nombre à ce qu'il a généré.
  • Si c'est le même il autorise l'accés

Fait le 07/12/2013