L’authentification sur un serveur à l’aide d’une clé publique / privée a plusieurs avantages. Le premier est de permettre de se connecter au serveur sans utiliser de mot de passe. Le second est d’offrir une meilleure sécurité si l’on supprime la possibilité de se connecter par login/mot de passe et que l’on force les utilisateurs à utiliser ce système de clé.
La création de la paire de clé
Dans un premier temps, il est nécessaire de créer une clé publique privée sur sa machine en utilisant cette commande :
- ssh-keygen -t rsa
La commande demandera ou installer la clé privée, laissez l’emplacement par défaut à savoir /home/votre_user/.ssh/id_rsa
.
Puis elle vous demandera un mot de passe qui servira plus tard pour s’authentifier au serveur.
En plus de la clé privée, la commande créera votre clé publique dans ~/.ssh/id_rsa.pub
.
NB : Si vous souhaitez par la suite modifier le mot de passe de la clé, il faudra utiliser la commande :
- ssh-keygen -p -t rsa
Dans le cas où votre machine utilise le système d’exploitation Windows, il vous faudra utiliser PuTTYgen pour la génération de vos clés.
La copie de votre clé publique sur le serveur
Afin de pouvoir utiliser cette clé pour s’authentifier au serveur souhaité, il est nécessaire de la copier dans les clés autorisées du compte utilisateur sur le serveur.
Il est donc nécessaire de se connecter au serveur :
- ssh user@mon_serveur
NB : "mon_serveur" est l’IP du serveur ou un FQDN qui pointe vers le serveur.
Puis de créer s’il n’existe pas, le répertoire .ssh
à la racine du répertoire utilisateur :
- mkdir ~/.ssh
On va ensuite ajouter au fichier ~/.ssh/authorized_keys
les clés autorisées à se connecter, on ouvre donc ce fichier en édition :
Puis d’y coller le contenu de notre clé publique contenue dans le fichier ~/.ssh/id_rsa.pub
contenue sur la machine cliente.
Dans le cas ou l’accès ssh par login / mot de passe simple est désactivé, l’intervention d’un administrateur ou d’une autre personne ayant l’autorisation de se connecter en tant que cet utilisateur est nécessaire.
Pour les utilisateurs ayant un client SSH récent et disposant de la commande ssh-copy-id
, cette action peut être effectuée plus simplement en utilisant la commande suivante qui transfèrera la clé automatiquement sans nécessité de copier / coller manuellement :
- ssh-copy-id -i ~/.ssh/id_rsa.pub user@mon_serveur
Lors du simple ajout de clé (sans autre modifications de la configuration), il est nécessaire de redémarrer le server openssh
afin qu’il prenne en compte le nouveau client.
- sudo /etc/init.d/ssh restart
Droits sur le répertoire .ssh/
et ses fichiers
Il est important de sécuriser l’accès au répertoire ~/.ssh/
et des fichiers qu’il contient.
Logué en tant qu’utilisateur système pour lequel la clé a été ajoutée, lancez la commande :
- chmod 700 ~/.ssh && chmod 600 ~/.ssh/*
Cela ne laissera l’accès à ce répertoire qu’à l’utilisateur en cours.
Désactivation de la méthode d’authentification par mot de passe
Maintenant que notre clé est installée, on peut désactiver la méthode d’authentification par mot de passe. Il suffit d’éditer sur le serveur le fichier de configuration du serveur ssh :
- sudo nano /etc/ssh/sshd_config
Puis d’ajouter ou modifier la ligne :
- PasswordAuthentication no
Puis de redémarrer le serveur ssh :
- sudo /etc/init.d/ssh restart
Dorénavant seuls les utilisateurs autorisés à se connecter par clé pourront avoir accès au serveur et donc toute tentative d’intrusion étrangère sera rejetée.
NB : Il semble qu’il y ait un bug sur ubuntu, lorsque l’authentification par mot de passe est désactivée, il est impossible de se connecter au serveur et on obtient le message Permission denied (publickey).
. La solution est d’utiliser la commande suivante pour se connecter :
- SSH_AUTH_SOCK=0 ssh mon_serveur
NB2 : Il est à noter que les clés sont valables pour une machine et un utilisateur particulier.
Aller plus loin :
Pour protéger un peu plus son système, il peut être efficace d’utiliser le logiciel fail2ban. Un tutoriel d’installation a été réalisé par Fil ici, un autre sur ce même site.