Il est idéal de pouvoir s’identifier sur un serveur distant, à l’aide d’une clé SSH, sans avoir à taper son mot de passe à chaque fois.
Pas seulement pour un gain de temps mais pour, par exemple, transférer des données ou avoir un cron qui lance une sauvegarde planifiée automatiquement, sans que vous ayez à taper le mot de passe SSH.
Et puis, c’est un degré de sécurité supplémentaire puisque personne ne pourra deviner votre clé RSA, à moins d’avoir eu main mise sur votre machine.
Ce tutoriel est très rapide à mettre en œuvre, quelques minutes à peine suffisent pour créer votre clé et la placer sur le serveur distant.
Voici le principe de fonctionnement en image:
Concrètement, au lieu d’utiliser un nom d’utilisateur et un mot de passe en mode interactif (l’invite de commande vous demande d’entrer votre mot de passe), il suffit de donner le nom d’utilisateur et le serveur reconnaît votre machine grâce à votre clé SSH.
Créer un répertoire .ssh
pour l’utilisateur
Normalement, votre utilisateur possède déjà un répertoire .ssh
mais si ce n’est pas le cas, il faut le créer. Vous pouvez passer à l’étape suivante si vous disposez déjà de ce répertoire.
On se rend dans le répertoire de l’utilisateur:
cd ~/
On crée le répertoire .ssh
:
mkdir .ssh
Code language: CSS (css)
On s’assure que les permissions de fichiers permettent de lire, écrire et exécuter uniquement pour notre utilisateur:
chmod go-rwx .ssh
Code language: CSS (css)
Créer une clé SSH
Nous allons maintenant créer une clé SSH, ou plutôt 2 clés : une clé privée et une clé publique.
Les guillemets à la fin de la commande indiquent que la clé privée n’a pas de mot de passe, ce qui permet de s’identifier sans mot de passe.
On se place dans le répertoire .ssh
:
cd .ssh
Code language: CSS (css)
Nous créons une clé de 4096 bits, sans mot de passe :
ssh-keygen -b 4096 -t ed25519 -f id_rsa -P ""
Code language: JavaScript (javascript)
Nous obtenons deux fichiers :
id_rsa
: notre clé privéeid_rsa.pub
: notre clé publique
S’identifier sans mot de passe sur un serveur distant
Pour s’identifier sans mot de passe sur un serveur distant grâce à notre nouvelle clé SSH, il faut que le serveur distant la reconnaisse et donc qu’il en ait connaissance.
Voici la commande magique qui vous permet d’installer votre clé publique directement sur le serveur distant :
ssh-copy-id -i id_rsa.pub USER@SERVER
Code language: CSS (css)
La commande ssh-copy-id
est une commande native d’OpenSSL donc à privilégier.
Sinon, comme alternative, vous pouvez également utiliser:
cat ~/.ssh/id_rsa.pub | ssh USER@SERVER "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
Code language: JavaScript (javascript)
Explications :
- on récupère le contenu de notre clé publique :
cat ~/.ssh/id_rsa.pub
- on s’identifie avec notre utilisateur (USER) sur le serveur (SERVER) :
ssh USER@SERVER
- et on crée le répertoire
.ssh
s’il n’existe pas avant d’ajouter notre clé publique au fichier/.ssh/authorized_keys
:"mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
Au lancement de la commande, on vous demandera de donner votre mot de passe. Les sessions suivantes utiliseront votre clé SSH, sans mot de passe.
Ouvrez une session sur le serveur distant : il ne devrait plus vous demander de mot de passe mais utiliser votre fichier de clé SSH.
A vous les sauvegardes automatisées ou les rsync
sauvages la nuit lorsque tout le monde dort !
Recherchez-vous un expert WordPress ou WooCommerce sur qui vous pouvez compter? Ne cherchez plus.
Bonjour
Comment fait-on dans le cas d’une tâche cron de sauvegarde être deux serveurs pour mémoriser la passphrase ? En effet, si je créée une clé ssh sur un serveur et que je mets la clé publique sur l’autre, à la première connexion, le serveur me demande la passphrase de ma clé. Tant que je reste connecté ça marche, mais ensuite il me redemande la passe phrase, ce qui fait que la tâche cron n’est pas exécuté, personne n’étant là pour taper la passphrase.
Merci d’avance pour votre aide.
Bonjour Denis,
Je viens de simplifier le processus d’ajout de la clé SSH en une seule commande. Cela devrait régler le problème.
– Matt
Super.
Merci.
J’essaie ça dès que possible.
Remplace rsa par ed25519, c’est plus léger, plus rapide et sûr :)
Très bonne suggestion Angristan, je modifie :)
Très intéressant et facile à mettre en place. Néanmoins, je rencontre le problème suivant, une fois que je lance la commande :
J’entre correctement mon mot de passe qui est redemandé lorsque je fais un
Mais j’ai l’erreur qui s’affiche :
(Vous remarquerez que j’essai de combiner 2 de vos tutoriaux ;))
Merci en tout cas pour tous les bons guides que vous proposez
Bonjour Cyrille,
Est-ce que tu cherches à lancer une connexion SSH puis lancer une commande directement dans la foulée ? Si oui, tu peux utiliser
ssh -t
puis la commande.Voici un exemple:
Hello,
Pas besoin de créer le dossier .ssh, il est créé par la commande ssh-keygen.
Sinon il y a une commande native avec openssh pour transferer la clé publique sur un serveur distant :
Je trouve qu’utiliser les commandes natives d’openssh permet de mieux gérer les permissions des différents dossiers.
ps: merci pour tous les tutos ils m’ont beaucoup servi pour mon serveur dédié ;)
Bonjour Tony,
C’est vrai que `ssh-copy-id`est plus simple car natif. Je le rajoute à l’article.
Ps: je suis content que cela t’ait aidé :)
Matt