Cet article décrit la mise en place d’une connexion SSH sans mot de passe, à l’aide d’une paire de clés. Si l’on se connecte quotidiennement à une machine distante, la connexion SSH sans mot de passe évite d’avoir à saisir le mot de passe à chaque fois. Dans l’exemple ci-dessous, l’utilisateur kikinovak
souhaite se connecter depuis la machine alphamule.microlinux.lan
à la machine amandine.microlinux.lan
sans avoir à saisir son mot de passe à chaque connexion.
Générer la paire de clés
Sur la machine alphamule.microlinux.lan
, je crée une clé d’identification SSH :
$ ssh-keygen -t rsa -b 16384 Generating public/private rsa key pair.
Pour plus de sécurité, j’ai spécifié une clé d’une longueur de 16384 bits, ce qui constitue d’ailleurs la taille maximale. Ne vous étonnez pas si la génération de la clé met quelques minutes, même sur une machine puissante.
J’accepte l’emplacement par défaut pour la sauvegarde de la clé :
Enter file in which to save the key (/home/kikinovak/.ssh/id_rsa): [Entrée]
Je laisse la zone du mot de passe vide :
Enter passphrase (empty for no passphrase): [Entrée] Enter same passphrase again: [Entrée]
Je viens de créer une clé privée ~/.ssh/id_rsa
et une clé publique ~/.ssh/id_rsa.pub
:
Your identification has been saved in /home/kikinovak/.ssh/id_rsa. Your public key has been saved in /home/kikinovak/.ssh/id_rsa.pub. The key fingerprint is: SHA256:bZweuDaCB7iYxanGjFbpkyzcHxkzHO1OBkqUGPaUH9g kikinovak@alphamule The key's randomart image is: +---[RSA 16384]---+ | .. +.+o | | ..+.O.. | |. +.OoO o | | . B.E B | |. = * S | |. .= o . | | . .o.+o .. | | .+ += o . | | . =. +... | +----[SHA256]-----+ $ tree -a .ssh/ .ssh/ ├── id_rsa ├── id_rsa.pub └── known_hosts 0 directories, 3 files
L’algorithme de chiffrement
Lorsque vous générez une paire de clés avec ssh-keygen,
l’option -t
permet de spécifier l’algorithme de chiffrement. Sans trop rentrer dans les détails (man ssh-keygen
), voici une vue d’ensemble sur ces différents algorithmes :
dsa
: à éviter.rsa
: sûr avec une longueur de clé supérieure ou égale à 4096 bits.ed25519
: sûr.
Alternativement, j’aurais très bien pu générer ma paire de clés comme ceci :
$ ssh-keygen -t ed25519
Generating public/private ed25519 key pair.
...
Dans ce cas, je me serais retrouvé avec une clé privée ~/.ssh/id_ed25519
et une clé publique ~/.ssh/id_ed25519.pub
:
$ tree -a .ssh/ .ssh/ ├── id_ed25519 ├── id_ed25519.pub └── known_hosts 0 directories, 3 files
Transférer la clé publique
Maintenant, il faut transférer la clé publique (et non pas la clé privée) sur la machine distante, en l’occurrence amandine.microlinux.lan
:
[kikinovak@alphamule:~] $ ssh-copy-id -i .ssh/id_rsa.pub amandine.microlinux.lan /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: ".ssh/id_rsa.pub" /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys kikinovak@amandine.microlinux.lan's password: Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'amandine.microlinux.lan'" and check to make sure that only the key(s) you wanted were added.
Contrôler les clés installées
À présent, on peut se connecter à la machine distante :
[kikinovak@alphamule:~] $ ssh amandine.microlinux.lan Last login: Fri Nov 25 22:34:46 2022 from alphamule.microlinux.lan
Notez que nous ne sommes pas obligés d’utiliser le FQDN (Fully Qualified Domain Name). Nous pouvons très bien utiliser le nom d’hôte simple pour la connexion :
[kikinovak@alphamule:~] $ ssh amandine Last login: Fri Nov 25 22:34:46 2022 from alphamule.microlinux.lan
Sur la machine distante, la clé publique transférée apparaît dans le fichier ~/.ssh/authorized_keys
:
[kikinovak@nestor:~] $ cat ~/.ssh/authorized_keys AAAAB3NzaC1yc2EAAAADAQABAAABAQC2QQSfCGvvt7T9Fx/iSUIe1c/7c6wfQ0sdpF t6tmhvPWRgwjfxhB4XZLZnEduUAfEcxgjsZ/fw4kIYWKlcndnOdeiUxCz1ebSg1+4H KBMBLtWEjg1koKZEoX6hnYatah0ngaga7hMiY2v66MdsjZam00cheLOom0g2s2l0op 8Q4o6QBJOn3L4VgeEZbPYw8fs/IXmSscoCGkUmMlmUo0Mka/Gv96ccSAsSywANaKlD 2n0X2dRyWHhTMHc7J047xyCxa0c6A1NeoX6sn8oI3pECIJEoZ4ml1OQfj3VPGFCNoL +WciQRf kikinovak@alphamule
Se connecter sous une autre identité
Admettons que je sois l’utilisateur kikinovak
sur la machine locale et que je souhaite me connecter en tant qu’utilisateur microlinux
sur la machine distante betadine.microlinux.fr
. Voilà comment cela se présenterait :
$ ssh-copy-id -i .ssh/id_rsa.pub microlinux@betadine.microlinux.fr /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: ".ssh/id_rsa.pub" /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys microlinux@betadine.microlinux.fr's password: Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'microlinux@betadine.microlinux.fr'" and check to make sure that only the key(s) you wanted were added.
Et si la clé existe déjà ?
Dans certains cas de figure, et notamment après la réinstallation d’une machine, on peut se retrouver confronté à l’avertissement suivant :
/usr/bin/ssh-copy-id: WARNING: All keys were skipped because they already exist on the remote system. (if you think this is a mistake, you may want to use -f option)
On pourrait très bien utiliser l’option -f
pour forcer le transfert de la clé publique. Une approche plus propre consiste à se connecter au préalable à la machine distante pour faire un brin de ménage dans le fichier ~/.ssh/authorized_keys
.
Se connecter sans mot de passe
Dorénavant, la connexion SSH ne requiert pas la saisie du mot de passe :
[kikinovak@alphamule:~] $ ssh amandine Last login: Tue Nov 29 10:16:16 2022 from alphamule.microlinux.lan [kikinovak@amandine:~] $ exit déconnexion Connection to amandine closed. [kikinovak@alphamule:~] $ ssh microlinux@betadine.microlinux.fr Last login: Sat Oct 15 00:04:08 2022 from 88.161.127.212 [microlinux@sd-100246:~] $ exit logout Connection to betadine.microlinux.fr closed.
La rédaction de cette documentation demande du temps et des quantités significatives de café espresso. Vous appréciez ce blog ? Offrez un café au rédacteur en cliquant sur la tasse.
2 commentaires
Tux · 24 juillet 2024 à 18 h 51 min
Bonsoir
Pourquoi ne pas mettre de passphrase lors de la génération car pourtant cela apporte une sécurité supplémentaire ?
kikinovak · 24 juillet 2024 à 19 h 06 min
Pour éviter d’avoir à la retaper à chaque connexion.