Heim >Backend-Entwicklung >Golang >Wie führe ich Befehle auf Remote-Rechnern mit der Go-CLI aus?

Wie führe ich Befehle auf Remote-Rechnern mit der Go-CLI aus?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-08 10:53:02883Durchsuche

How to Execute Commands on Remote Machines Using Go CLI?

Remote-Befehlsausführung in Go CLI

Einführung

Diese Anleitung stellt Ihnen die notwendigen Schritte zum Ausführen von Befehlen vor ein Remote-Computer mit einer Go-CLI. Sie erfahren, wie Sie eine Verbindung über SSH herstellen, sich mit einem Schlüssel authentifizieren und Single-Hop-Verbindungen handhaben, sodass Sie Befehle sowohl auf Bastion- als auch auf Zielmaschinen ausführen können.

Verwendung von SSH für die Remoteausführung

Der erste Schritt besteht darin, das Paket „golang.org/x/crypto/ssh“ zu verwenden, um eine SSH-Verbindung herzustellen. Dieses Paket bietet die notwendige Funktionalität für die sichere Remote-Befehlsausführung.

Beispielverwendung

Um zu demonstrieren, wie es funktioniert, erstellen wir eine Funktion namens remoteRun, die einen einzelnen Befehl ausführt eine Remote-Maschine und gibt die Ausgabe zurück:

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
}

Verwendung

Um die remoteRun-Funktion zu verwenden, können Sie die folgenden Parameter übergeben:

  • user: Benutzername für Remote-Computer
  • addr: Adresse des Remote-Computers
  • privateKey: Privater Schlüssel für SSH-Authentifizierung
  • cmd: Auszuführender Befehl

Single-Hop-Verbindungen

Wenn Sie über eine Bastion-Maschine eine Verbindung zum Zielcomputer herstellen müssen, können Sie die remoteRun-Funktion verschachtelt verwenden:

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
}

In diesem Beispiel enthält die Variable bastionOutput die Ausgabe des SSH-Befehls, der eine Verbindung zum Zielcomputer herstellt. Von dort aus enthält die Variable targetOutput die Ausgabe des auf dem Zielcomputer ausgeführten Befehls.

Das obige ist der detaillierte Inhalt vonWie führe ich Befehle auf Remote-Rechnern mit der Go-CLI aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn