Connexion en SSH avec une clef publique

Rédigé par Nicolas Sulek Aucun commentaire
Classé dans : Services réseaux Mots clés : SSH
Voulant sécuriser un peu plus mes connexions, je me suis décidé à supprimer les connexions SSH par mots de passe, qui peuvent être cassés, en permettant uniquement des connexions avec un couple clef privée/clef publique avec DSA.

Configuration du serveur SSH


On commence par configurer le serveur sshd.
Pas de grosses modifications, il suffit de rajouter ou de modifier le fichier /etc/ssh/sshd_config de la sorte :
# on autorise les connexions a base de clef
PubkeyAuthentication yes
# on interdit les connexions par mot de passe
PasswordAuthentication no
# on change la localisation du fichier des clefs autorises authorized_keys
AuthorizedKeysFile .ssh/authorized_keys

Problème, malgré le PasswordAuthentication no, les connexions par mot de passe peuvent encore été autorisées. C'est le cas sous Debian, à cause de la configuration de PAM relative à SSH. Il faut en  fait rajouter
UsePAM no

dans /etc/ssh/sshd_config. Voilà pour la configuration du démon sshd.

Génération des clefs avec l'algorithme DSA


Pour générer les clefs avec DSA, rien de plus simple. Sur le poste client, il suffit de taper
ssh-keygen -t dsa

pour générer le couple clef privée/clef publique DSA.

Après avoir validé cette commande, deux questions vont être posées :
- l'emplacement où stocker la clef privée, le choix par défaut convient parfaitement (dans le répertoire .ssh de l'utilisateur courant)
- la passphrase protégeant cette clef, à évidemment ne pas oublier :D

Et voilà, les clefs sont générées ! La clef privée se trouve dans $HOME/.ssh/id_dsa et la clef publique dans $HOME/.ssh/id_dsa.pub, $HOME étant le répertoire de l'utilisateur sous lequel ont été créées les clefs. La clef publique doit maintenant être exportée vers le serveur ssh afin de pouvoir nous identifier.

Rajout des clefs autorisées sur le serveur SSH


Pour autoriser certaines clefs publiques à se connecter au serveur SSH, il suffit d'utiliser ssh-copy-id. Par exemple,
ssh-copy-id -i /home/toto/.ssh/id_dsa.pub toto@ip_serveur_ssh

Évidemment, il faut que le compte utilisateur existe sur le serveur :D Seul problème de cette méthode est qu'elle ne fonctionne qu'à condition que le serveur SSH utilise le port par défaut de SSH, donc le 22 :-(

Sinon, il faudra copier manuellement la clef publique sur le serveur. Dans ce cas, il faut éditer ou créer sur le serveur le fichier authorized_keys situé dans /home/toto/.ssh et y recopier le contenu de la clef publique.

Voilà, on a enfin un beau serveur sshd un peu plus sécurisé :-)

Les commentaires sont fermés.