Aller au contenu
ecdsa.com
golang.org/x/crypto/ssh (Go)Go

Message d’erreur

ssh: this private key is passphrase protected

Également affiché sous la forme

  • ssh: no key found

Le message « ssh: no key found » (répertorié comme alias) correspond à une autre situation détectée par le même analyseur : les octets ne contiennent aucun bloc de clé PEM, par exemple dans le cas d’une clé publique, d’un fichier PuTTY `.ppk` ou d’un fichier vide.

golang.org/x/crypto/ssh (Go) — *ssh.PassphraseMissingError from ssh.ParsePrivateKey

Ce que cela signifie

`ssh.ParsePrivateKey` a reconnu une clé privée chiffrée et s’est arrêté, faute de phrase de passe pour la déchiffrer. Le `*ssh.PassphraseMissingError` renvoyé contient même la clé publique, mais la signature exige la clé privée déchiffrée : appelez `ssh.ParsePrivateKeyWithPassphrase` ou laissez un agent SSH signer à votre place. L’erreur voisine « ssh: no key found » signifie que l’entrée ne contient aucune clé reconnaissable.

Pourquoi cela se produit

Comment corriger l’erreur

  1. 1.

    Détecter l’erreur et fournir la phrase de passe

    `errors.As` permet de repérer l’absence de phrase de passe ; lisez celle-ci depuis un gestionnaire de secrets, jamais depuis le code source.

    go
    signer, err := ssh.ParsePrivateKey(keyBytes)
    var missing *ssh.PassphraseMissingError
    if errors.As(err, &missing) {
    	passphrase := []byte(os.Getenv("SSH_KEY_PASSPHRASE"))
    	signer, err = ssh.ParsePrivateKeyWithPassphrase(keyBytes, passphrase)
    }
    if err != nil {
    	return err
    }
  2. 2.

    Signer via l’agent SSH

    Avec `golang.org/x/crypto/ssh/agent`, la clé privée n’entre jamais dans votre processus et c’est l’agent qui gère la phrase de passe.

    go
    import "golang.org/x/crypto/ssh/agent"
    
    conn, err := net.Dial("unix", os.Getenv("SSH_AUTH_SOCK"))
    if err != nil {
    	return err
    }
    agentClient := agent.NewClient(conn)
    auth := ssh.PublicKeysCallback(agentClient.Signers) // the agent holds the decrypted key

Erreurs associées

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