Maison > développement back-end > Golang > le corps du texte

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

DDD
Libérer: 2024-11-11 08:12:03
original
927 Les gens l'ont consulté

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
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal