Pour utiliser SSH (et dérivés tels que sftp) sans mot de passe, il faut ajouter votre clef sur le serveur. Nous aurons donc un ordinateur (manu-desktop) qui pourra se connecter à un serveur (server) par ssh sans avoir besoin de spécifier de mot de passe.
Notez qu’il existe des outils graphiques pour réaliser ces opérations (par exemple seahorse sous Gnome), mais je n’en parlerais pas.
Sur l’ordinateur client (manu-desktop)
La première chose à faire, si vous n’avez pas de clef pour votre machine, est d’en générer une
manu@manu-desktop:~$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/manu/.ssh/id_rsa):
Created directory '/home/manu/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/manu/.ssh/id_rsa.
Your public key has been saved in /home/manu/.ssh/id_rsa.pub.
The key fingerprint is:
cd:9e:bb:0a:1e:22:29:fa:e3:dc:12:72:8a:15:13:58 manu@manu-desktop
manu@manu-desktop:~$ ls -l ~/.ssh
total 8,0K
3367418 -rw------- 1 manu manu 1,7K 2009-01-15 13:26 id_rsa
3367419 -rw-r--r-- 1 manu manu 399 2009-01-15 13:26 id_rsa.pub
manu@manu-desktop:~$ |
manu@manu-desktop:~$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/manu/.ssh/id_rsa):
Created directory '/home/manu/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/manu/.ssh/id_rsa.
Your public key has been saved in /home/manu/.ssh/id_rsa.pub.
The key fingerprint is:
cd:9e:bb:0a:1e:22:29:fa:e3:dc:12:72:8a:15:13:58 manu@manu-desktop
manu@manu-desktop:~$ ls -l ~/.ssh
total 8,0K
3367418 -rw------- 1 manu manu 1,7K 2009-01-15 13:26 id_rsa
3367419 -rw-r--r-- 1 manu manu 399 2009-01-15 13:26 id_rsa.pub
manu@manu-desktop:~$
Ne mettez pas de passphrase et laisser les options par défaut pour la création de la clef. Il est aussi possible de spécifier les options via la ligne de commande:
ssh-keygen -qt rsa -b 1024 -C manu -f ~/.ssh/manu@manu-desktop.rsa -N "" |
ssh-keygen -qt rsa -b 1024 -C manu -f ~/.ssh/manu@manu-desktop.rsa -N ""
La commande précédente crée une clef rsa (-t) avec le commentaire (-C) manu d’une longueur de 1024 bits (-b) dans le fichier ~/.ssh/manu@manu-desktop.rsa (-f) avec une passphrase (-N) vide.
Sur le serveur (server)
Le compte utilisateur de connexion doit exister. Il n’est pas obligé que ce soit le même identifiant que sur le client. Par exemple, sur le serveur, mon compte est nommé zephir.
[root@server]:# adduser zephir
Ajout de l'utilisateur « zephir »...
Ajout du nouveau groupe « zephir » (1002)...
Ajout du nouvel utilisateur « zephir » (1002) avec le groupe « zephir »...
Création du répertoire personnel « /home/zephir »...
Copie des fichiers depuis « /etc/skel »...
Entrez le nouveau mot de passe UNIX :
Retapez le nouveau mot de passe UNIX :
passwd : le mot de passe a été mis à jour avec succès
Modification des informations relatives à l'utilisateur zephir
Entrez la nouvelle valeur ou « Entrée » pour conserver la valeur proposée
Nom complet []:
N° de bureau []:
Téléphone professionnel []:
Téléphone personnel []:
Autre []:
Ces informations sont-elles correctes ? [o/N] o
[root@server]:#
Sur l’ordinateur client (manu-desktop), fin des opérations
Il ne reste plus au client qu’à envoyer sa clef d’identification au serveur simplement par la commande suivante:
ssh-copy-id -i ~/.ssh/id_rsa.pub zephir@server |
ssh-copy-id -i ~/.ssh/id_rsa.pub zephir@server
Acceptez l’identification du serveur, le mot de passe est demandé (puisque vous n’avez pas encore envoyé la clef) et la clef est copiée dans le fichier /home/zephir/.ssh/authorized_keys.
Tentez la commande suivante (Ctrl+D pour sortir)
Vous ne devriez plus avoir de demande de mot de passe.
Sur le serveur, fin des opérations
Il est possible de sécuriser le serveur afin de n’accepter que les authentifications avec clef et sans demande de mot de passe (pour ssh. L’accès en local demandera toujours un mot de passe).
Ainsi, les tentatives d’attaque par force brute sont vouées à l’échec. MAIS, soyez conscient que vous ne pourrez plus vous connecter depuis une autre machine que celle pour laquelle vous avez envoyé la clef, pas plus que vous ne pourrez envoyer d’autres clefs.
Paramétrez le fichier /etc/ssh/sshd_config tel que ci dessous:
# Authentication:
LoginGraceTime 120
PermitRootLogin yes
StrictModes yes
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile %h/.ssh/authorized_keys
# Change to no to disable tunnelled clear text passwords
PasswordAuthentication no |
# Authentication:
LoginGraceTime 120
PermitRootLogin yes
StrictModes yes
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile %h/.ssh/authorized_keys
# Change to no to disable tunnelled clear text passwords
PasswordAuthentication no
Relancez ensuite le serveur ssh pour prendre en compte les modifications.
Note sur la sécurité
L’accès au serveur est possible sans authentification par l’utilisateur manu depuis l’ordinateur client (manu-desktop). Si cet ordinateur est un portable et qu’il se fait voler, celui qui arrivera à se connecter avec l’identité de manu arrivera sans demande de mot de passe à se connecter au serveur !
Réfléchissez bien à l’utilisation de ce mode de fonctionnement avant de le mettre en place.
En cas de vol, il suffira de supprimer le fichier /home/zephir/.ssh/authorized_keys pour que la clef volée avec le portable ne soit plus opérationnelle.
Vous pouvez, de même, recréer et changer vos clefs d’identification lorsque vous le voulez en réutilisant les commandes données en début d’article.
Liens:
http://doc.ubuntu-fr.org/gnupg
http://doc.ubuntu-fr.org/ssh