Maison >développement back-end >Golang >Comment exécuter des commandes à distance avec SSH dans une CLI Golang ?

Comment exécuter des commandes à distance avec SSH dans une CLI Golang ?

DDD
DDDoriginal
2024-11-11 08:12:031000parcourir

How to Execute Remote Commands with SSH in a Golang CLI?

Exécuter des commandes à distance avec SSH dans Golang CLI

L'exécution de commandes sur des machines distantes est une tâche courante lors de l'automatisation de l'administration système. Dans Golang, le package « golang.org/x/crypto/ssh » offre un moyen pratique d'établir des connexions SSH et d'exécuter des commandes à distance.

Pour exécuter une commande sur une machine distante, suivez ces étapes :

  1. Établir une connexion SSH :
    Utilisez la fonction ssh.Dial pour établir une Connexion SSH à la machine distante. Vous devrez fournir les informations suivantes :

    • Nom d'utilisateur
    • Adresse IP ou nom d'hôte
    • Port (la valeur par défaut est 22)
    • Identifiants d'authentification ( clé ou mot de passe)
  2. Créer un Session SSH :
    Une fois la connexion établie, utilisez la fonction NewSession pour créer une nouvelle session. La session représente une connexion à une commande spécifique.
  3. Configurer l'entrée et la sortie :
    Vous pouvez configurer les flux d'entrée et de sortie standard pour la session. Par exemple, vous pouvez rediriger la sortie vers un bytes.Buffer pour capturer les résultats de la commande.
  4. Exécutez la commande :
    Utilisez la fonction session.Run pour exécuter la commande souhaitée sur la machine distante. Cette fonction se bloquera jusqu'à ce que la commande soit terminée.

Voici un exemple de fonction montrant comment exécuter une commande à distance et renvoyer sa sortie :

import (
    "bytes"
    "net"

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

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  // capture output
    session.Stdout = &b // get output

    err = session.Run(cmd)
    return b.String(), err
}

Cette fonction peut être utilisée pour exécutez des commandes sur des machines distantes, offrant ainsi un moyen pratique d'automatiser les tâches d'administration système à partir des scripts CLI Golang.

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