Créer une clé SSH pour ouvrir une session distante sans mot de passe

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:

Créer une clé SSH pour ouvrir une session distante sans mot de passe photo 1

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

On s’assure que les permissions de fichiers permettent de lire, écrire et exécuter uniquement pour notre utilisateur:

chmod go-rwx .ssh

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

Nous créons une clé de 4096 bits, sans mot de passe :

ssh-keygen -b 4096 -t ed25519 -f id_rsa -P ""

Nous obtenons deux fichiers :

  • id_rsa : notre clé privée
  • id_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.

Attention: vous ne devez jamais donner votre clé privée à quiconque. La seule clé à transmettre est la clé publique.

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

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"

Explications :

  1. on récupère le contenu de notre clé publique : cat ~/.ssh/id_rsa.pub
  2. on s’identifie avec notre utilisateur (USER) sur le serveur (SERVER) : ssh USER@SERVER
  3. 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 !

Envie d'ajouter des fonctionnalités exceptionnelles à votre site WordPress ou WooCommerce? Je suis là pour vous aider.

Explorons les possibilités ensemble »

Articles conseillés :

9 pensées sur “Créer une clé SSH pour ouvrir une session distante sans mot de passe”

  1. 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.

    Reply
  2. Très intéressant et facile à mettre en place. Néanmoins, je rencontre le problème suivant, une fois que je lance la commande :

    cat ~/.ssh/id_rsa.pub | ssh USER@SERVER "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

    J’entre correctement mon mot de passe qui est redemandé lorsque je fais un

    ssh root@XX.XXX.XXX.XXX -o find -type f -name "*.png" -exec optipng {} \;

    Mais j’ai l’erreur qui s’affiche :

    command-line: 0:Bad configuration option: find

    (Vous remarquerez que j’essai de combiner 2 de vos tutoriaux ;))

    Merci en tout cas pour tous les bons guides que vous proposez

    Reply
    • 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:

      ssh -t root@XX.XXX.XXX.XXX find -type f -name "*.png" -exec optipng {} \;
      Reply
  3. 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 :

    ssh-copy-id -i id_rsa.pub user@machine

    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é ;)

    Reply
    • 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

      Reply

Opinions