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 :
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!