Aller au contenu
ecdsa.com
OpenSSH client (ssh, scp, sftp, git over SSH)SSH

Message d’erreur

Permission denied (publickey).

Également affiché sous la forme

  • git@github.com: Permission denied (publickey).
  • Permission denied (publickey,password).

Précédé de `user@host:`. La liste entre parenthèses indique les méthodes que le serveur autorise encore, par exemple `(publickey,password)` ou `(publickey,gssapi-keyex,gssapi-with-mic)`.

Ce que cela signifie

La connexion SSH et la vérification de l’hôte ont réussi, mais le serveur n’a accepté aucune des clés publiques proposées par le client, et l’authentification par clé publique est la seule méthode qu’il autorise (la liste entre parenthèses). Le client n’apprend jamais pourquoi une clé a été refusée : la raison ne figure que dans le journal du serveur. Sur GitHub, GitLab et Bitbucket, le même message signifie qu’aucune de vos clés n’est enregistrée sur le compte (ou comme clé de déploiement) qui donne accès à ce dépôt.

Pourquoi cela se produit

Comment corriger l’erreur

  1. 1.

    Voir quelles clés sont proposées

    `ssh -v` liste chaque clé proposée par le client et indique si le serveur l’a acceptée ; `ssh -G` affiche l’utilisateur et les fichiers d’identité effectifs une fois toute la configuration appliquée.

    bash
    ssh -v deploy@server.example.com 2>&1 | grep -E "Offering|Server accepts|Authentications that can continue|send_pubkey_test"
    ssh-add -l                                  # keys the agent offers
    ssh -G deploy@server.example.com | grep -E "^(user|identityfile|identitiesonly) "
  2. 2.

    Fixer l’identité pour chaque hôte

    `IdentityFile` combiné à `IdentitiesOnly yes` propose exactement une clé et évite « Too many authentication failures » avec les agents qui contiennent beaucoup de clés.

    text
    # ~/.ssh/config
    Host server.example.com
      User deploy
      IdentityFile ~/.ssh/deploy_ed25519
      IdentitiesOnly yes
  3. 3.

    Corriger le côté serveur et lire son journal

    Installez la clé publique pour le bon utilisateur avec des permissions strictes, et cherchez dans le journal de sshd la raison précise du refus.

    bash
    # On the server: install the key and fix modes (sshd ignores keys in group/world-writable paths)
    install -d -m 700 ~/.ssh && cat deploy_ed25519.pub >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys
    sudo journalctl -u ssh --since "10 min ago" | grep -E "Authentication refused|not in PubkeyAccepted|Failed publickey"

Erreurs associées

Parcourir toute la base de données des erreurs de signature