Maison >développement back-end >Golang >Comment se connecter à un serveur distant en utilisant SSH avec une clé privée dans Golang ?

Comment se connecter à un serveur distant en utilisant SSH avec une clé privée dans Golang ?

DDD
DDDoriginal
2024-11-05 13:36:02347parcourir

How to Connect to a Remote Server Using SSH with a Private Key in Golang?

Connectez-vous à un serveur distant à l'aide de SSH avec une clé privée dans Golang

L'utilisation du package SSH dans Go permet des connexions pratiques aux serveurs distants via Protocoles SSH. Cependant, l'établissement de connexions avec des clés privées nécessite une compréhension plus approfondie des fonctionnalités du package.

Le package SSH prend en charge diverses méthodes d'authentification, y compris l'authentification par mot de passe. La fonction Dial, comme mentionné dans la documentation du package, permet aux utilisateurs de spécifier la méthode d'authentification à utiliser pour établir la connexion. Pour exploiter une clé privée pour l'authentification, nous devons utiliser des méthodes supplémentaires fournies par le package.

La fonction PublicKeys joue un rôle crucial dans ce scénario. Il aide à convertir une collection de signataires SSH en un mécanisme d'authentification. Ces signataires peuvent être obtenus à l'aide de diverses méthodes, notamment en les analysant à partir de représentations d'octets PEM. La possibilité d'utiliser directement les clés privées RSA, DSA ou ECDSA est également prise en charge grâce à l'utilisation de la fonction NewSignerFromKey.

Prenons un exemple qui démontre la mise en œuvre pratique de ces concepts. Cet exemple intègre la prise en charge de l'authentification basée sur un agent, qui suit généralement l'utilisation de l'authentification par clé privée.

<code class="go">import (
    "log"
    "net"
    "os"

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

func main() {
    // Establishes a connection to the SSH Agent
    sock, err := net.Dial("unix", os.Getenv("SSH_AUTH_SOCK"))
    if err != nil {
        log.Fatal(err)
    }
    agent := agent.NewClient(sock)

    // Acquires signers from the SSH Agent
    signers, err := agent.Signers()
    if err != nil {
        log.Fatal(err)
    }

    // Creates a list of authentication methods using the signers obtained
    auths := []ssh.AuthMethod{ssh.PublicKeys(signers...)}

    // Configures the client using the username and authentication details
    cfg := &ssh.ClientConfig{
        User: "username",
        Auth: auths,
    }
    cfg.SetDefaults()

    // Establishes a connection to the remote server
    client, err := ssh.Dial("tcp", "aws-hostname:22", cfg)
    if err != nil {
        log.Fatal(err)
    }

    // Creates a new session in the established connection
    session, err = client.NewSession()
    if err != nil {
        log.Fatal(err)
    }

    log.Println("Successfully established a session!")
}</code>

Avec cet exemple de code amélioré, il est possible de se connecter à un serveur à distance à l'aide d'une clé privée via SSH. paquet dans Go. Des fonctionnalités supplémentaires telles que l'authentification basée sur un agent ont également été intégrées pour une démonstration plus complète de l'ensemble du processus.

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