Cles SSH et configuration utilisateur de 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