Jusqu’à présent, j’ai toujours utilisé le couple login/password pour me connecter sur mes machines via SSH, mais en voyant mon Syno commencer récemment à se faire spammer (probablement par des bots) j’ai commencé à m’intéresser à l’authentification par clés RSA.
L’idée est la suivante : le client et le serveur ont tous les deux une clé publique et une clé privée, et le serveur connaît la clé publique du client correspondant à un certain login. Au momment de la connexion
- Le client et le serveur établissent un lien SSH sécurisé
- Le client envoit une première requête d’authentification non-chiffrée, contenant notamment le login qu’il souhaite utiliser
- Si le serveur confirme connaître ce login, le client envoit alors une seconde requête, cette fois chiffrée grâce à sa clé privée (qui n’est pas transmise telle quelle et ne doit être distribuée)
- Si le serveur parvient à déchiffrer cette requête au moyen de la clé publique correspondante au login, l’authentification est validée
La seule manipulation technique repose dans le prérequis de copie initiale de la clé publique du client, laquelle doit être générée (si elle n’existe pas déjà). Voici les étapes à suivre sur la machine côté client :
- Utiliser la commande «
ssh-keygen -t rsa» pour générer à la fois les clés publique et privée - Choisir une passphrase si on souhaite ajouter un niveau de sécurité supplémentaire à chaque connexion via ces clés – utile sur un ordinateur portable qui pourrait être perdu, par exemple, ou sur une machine directement accessible via internet
- Utiliser la commande «
ssh-copy-id [-p (port)] login@serveur» qui va s’occuper de copier la clé et la stocker au bon endroit sur le serveur
Normalement, c’est tout. On peut alors tester la connexion en tapant « ssh login@serveur [-p xxxxx] » .
À noter que la commande « ssh-copy-id » implique de pouvoir ouvrir un lien SSH au préalable depuis le client vers le serveur, ce qui est souvent bloqué par défaut dans la configuration d’OpenSSH : il faut alors s’y connecter via le réseau local et remplacer temporairement « PasswordAuthentication no » par « PasswordAuthentication yes », le temps de copier ses clés sur le serveur. Il faudra ensuite redémarrer le serveur SSH (commande pour un Syno sous DSM6 : sudo synoservicectl --reload sshd / et sous DSM7 : sudo synosystemctl restart sshd.service)