Clés SSH

Un petit post mémo pour rappeler comment créer une clé SSH, la copier sur le serveur distant, et se faciliter un poil la vie avec le fichier de configuration utilisateur de SSH.

Depuis quelques années, j’utilisais l’algorithme RSA pour générer mes clés SSH (j’espère que vous avez banni DSA depuis longtemps, de toute façon, si vous avez un système récent et à jour, vous avez, normalement, openssh dans une version supérieure à 7, qui ne supporte plus DSA).
Ce qui donnait :

ssh-keygen -t rsa -b 4096

Une clé de 4096 bits. Du solide !

Mais j’ai récemment découvert les algorithmes EC ou algos à courbes élliptiques. Ça pète ! Et surtout, ben c’est plus secure

À ma connaissance, il en existe 2 : ECDSA et ED25519.
Le premier - ECDSA - a un peu mauvaise réputation depuis que le bruit a couru qu’il serait vérolé par la NSA.
Le second en revanche, très récent, est considéré comme le meilleur en terme de sécurité. De plus, ses performances sont aussi très bonnes du fait qu’i lutilise de petites clés, ceci rendant le chiffrage et le déchiffrage plus rapides.

Avant de commencer à générer une nouvelle clé ed25519, assurez vous d’avoir une version de SSH supérieure ou égale à 7 (côté client, comme côté serveur)

ssh -V

Côté serveur, vérifier dans /etc/ssh/sshd_config que vous avez bien cette ligne de conf :

HostKey /etc/ssh/ssh_host_ed25519_key

Si tout est bon, alors pour générer une paire de clés (privée et publique) ed25519, faire :

ssh-keygen -t ed25519

Il vous sera demandé de créer une passphrase. Mettez là quelque chose d’assez solide mais dont vous vous souviendrez lorsque vous aurez besoin de dévérouiller votre clé.

Ensuite, on peut copier sa clé publique sur le serveur de cette manière :

ssh-copy-id -i ~/.ssh/id_ed25519.pub user@serveur.exemple

Voilà. Maintenant on peut se connecter au serveur en utilisant sa clé avec un simple :

ssh user@serveur.exemple

Mais c’est vachement long et chiant à taper 😱
Du coup on va se faire un “raccourci” en se servant du fichier config utilisateur de ssh : ~/.ssh/config. Par défaut, il n’existe pas, il faut donc le créer. Ensuite nous pouvons y mettre une section comme ci dessous :

Host monserveur            
 Hostname serveur.exemple           
 Compression yes   
 Port 22     
 IdentityFile ~/.ssh/id_ed25519
 IdentitiesOnly yes     
 User user 

Et hop, on a plus qu'à faire ssh monserveur et c’est parti !

Les deux directives essentielles ici sont le Hostname pour préciser l’adresse du serveur (nom de domaine ou IP), et User pour préciser le nom d’utilisateur.
Compression sert à activer ou non la compression. Port est utile si vous utilisez un port diffférent du port SSH par défaut (22). Quant à IdentityFile et IdentitiesOnly, ces dernières sont surtout utiles lorsque vous utilisez différentes clés pour différents services. Pour plus d’informations sur toutes ces options possibles, faites un man ssh_config