Maison >développement back-end >Golang >Comment exécuter des commandes sur des machines distantes à l'aide de Go CLI ?

Comment exécuter des commandes sur des machines distantes à l'aide de Go CLI ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-08 10:53:02887parcourir

How to Execute Commands on Remote Machines Using Go CLI?

Exécution de commandes à distance dans Go CLI

Introduction

Ce guide vous fournira les étapes nécessaires pour exécuter des commandes sur une machine distante à l’aide d’une Go CLI. Vous apprendrez à vous connecter via SSH, à vous authentifier à l'aide d'une clé et à gérer les connexions à saut unique, vous permettant ainsi d'exécuter des commandes sur les machines bastion et cible.

Utiliser SSH pour l'exécution à distance

La première étape consiste à utiliser le package "golang.org/x/crypto/ssh" pour établir une connexion SSH. Ce package fournit les fonctionnalités nécessaires à l'exécution sécurisée de commandes à distance.

Exemple d'utilisation

Pour démontrer son fonctionnement, créons une fonction appelée RemoteRun qui exécute une seule commande sur une machine distante et renvoie la sortie :

func remoteRun(user, addr, privateKey, cmd string) (string, error) {
    key, err := ssh.ParsePrivateKey([]byte(privateKey))
    if err != nil {
        return "", err
    }

    config := &ssh.ClientConfig{
        User: user,
        HostKeyCallback: ssh.InsecureIgnoreHostKey(),
        Auth: []ssh.AuthMethod{
            ssh.PublicKeys(key),
        },
    }

    client, err := ssh.Dial("tcp", net.JoinHostPort(addr, "22"), config)
    if err != nil {
        return "", err
    }

    session, err := client.NewSession()
    if err != nil {
        return "", err
    }
    defer session.Close()

    var b bytes.Buffer
    session.Stdout = &b
    err = session.Run(cmd)
    return b.String(), err
}

Utilisation

Pour utiliser la fonction RemoteRun, vous pouvez transmettre les paramètres suivants :

  • user : Nom d'utilisateur pour la machine distante
  • addr : Adresse de la machine distante
  • privateKey : Clé privée pour l'authentification SSH
  • cmd : Commande à exécuter

Connexions à saut unique

Si vous devez vous connecter à la machine cible via une machine bastion, vous pouvez utiliser la fonction RemoteRun de manière imbriquée :

bastionOutput, err := remoteRun("user", "bastion-addr", "key", "ssh user@target-addr -p 22")
if err != nil {
    // Handle error
}
targetOutput, err := remoteRun("user", "target-addr", "key", "command-on-target")
if err != nil {
    // Handle error
}

Dans cet exemple, la variable bastionOutput contient la sortie de la commande SSH qui se connecte à la machine cible. À partir de là, la variable targetOutput contient la sortie de la commande exécutée sur la machine cible.

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