Maison  >  Article  >  développement back-end  >  Comment établir des connexions SSH avec des clés à l'aide du package ssh de Go ?

Comment établir des connexions SSH avec des clés à l'aide du package ssh de Go ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-02 12:47:30866parcourir

How to Establish SSH Connections with Keys Using Go's ssh Package?

Établir une connexion SSH avec une clé à l'aide du package ssh de Go

La connexion à un serveur distant via SSH avec une clé est une tâche essentielle dans l'administration des systèmes et DevOps. Le langage de programmation Go fournit le package ssh pour gérer les connexions SSH. Cependant, naviguer dans sa documentation peut s'avérer difficile.

La question se pose : Peut-on se connecter à un serveur SSH à l'aide d'un fichier de clé ou d'une clé privée avec le package Go ssh ?

La documentation indique que seule la méthode d'authentification "mot de passe" est actuellement prise en charge. Ne vous inquiétez pas, car il est tout à fait possible d'établir une connexion à l'aide d'un fichier de clé ou d'une clé privée.

La clé pour déverrouiller cette fonctionnalité réside dans la conversion du fichier de clé en ssh.Signer, puis dans son intégration dans ssh. .AuthMethod.PublicKeys. Voici un exemple d'extrait de code pour expliquer le processus :

<code class="go">import (
    "crypto/ecdsa"
    "crypto/x509"
    "encoding/pem"
    "fmt"
    "io/ioutil"
    "log"
    "net"

    "golang.org/x/crypto/ssh"
    "golang.org/x/crypto/ssh/agent"
)

func main() {
    pemBytes, err := ioutil.ReadFile("my_key.pem")
    if err != nil {
        log.Fatal(err)
    }

    block, _ := pem.Decode(pemBytes)
    privKey, err := x509.ParseECPrivateKey(block.Bytes)
    if err != nil {
        log.Fatal(err)
    }

    signer, err := ssh.NewSignerFromKey(privKey)
    if err != nil {
        log.Fatal(err)
    }

    auths := []ssh.AuthMethod{ssh.PublicKeys(signer)}

    cfg := &ssh.ClientConfig{
        User: "username",
        Auth: auths,
    }
    cfg.SetDefaults()

    client, err := ssh.Dial("tcp", "aws-hostname:22", cfg)
    if err != nil {
        log.Fatal(err)
    }

    session, err := client.NewSession()
    if err != nil {
        log.Fatal(err)
    }

    stdout, err := session.Output("whoami")
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println(string(stdout))
}</code>

Ce code amélioré gère à la fois les fichiers de clés et les clés privées, offrant ainsi une solution plus complète. Dans l'exemple, une clé ecdsa est utilisée, mais le concept s'applique à tout type de clé privée.

Conclusion :

Le package Go ssh permet d'établir des connexions SSH à l'aide de clés. Naturellement, la documentation peut paraître complexe. En utilisant ssh.PublicKeys et en convertissant la clé au format approprié à l'aide de ssh.Signer, il devient possible de se connecter de manière transparente et d'effectuer des tâches système essentielles.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn