Heim > Backend-Entwicklung > Golang > Wie führe ich Remote-Befehle mit SSH in einer Golang-CLI aus?

Wie führe ich Remote-Befehle mit SSH in einer Golang-CLI aus?

DDD
Freigeben: 2024-11-11 08:12:03
Original
974 Leute haben es durchsucht

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

Remotebefehle mit SSH in Golang CLI ausführen

Das Ausführen von Befehlen auf Remotecomputern ist eine häufige Aufgabe bei der Automatisierung der Systemverwaltung. In Golang bietet das Paket „golang.org/x/crypto/ssh“ eine bequeme Möglichkeit, SSH-Verbindungen herzustellen und Befehle aus der Ferne auszuführen.

Um einen Befehl auf einem Remote-Computer auszuführen, befolgen Sie diese Schritte:

  1. Stellen Sie eine SSH-Verbindung her:
    Verwenden Sie die ssh.Dial-Funktion, um eine SSH-Verbindung zum Remote-Computer herzustellen. Sie müssen die folgenden Informationen angeben:

    • Benutzername
    • IP-Adresse oder Hostname
    • Port (Standard ist 22)
    • Authentifizierungsdaten ( Schlüssel oder Passwort)
  2. Erstellen Sie eine SSH-Sitzung:
    Sobald die Verbindung hergestellt ist, verwenden Sie die NewSession-Funktion, um eine neue Sitzung zu erstellen. Die Sitzung stellt eine Verbindung zu einem bestimmten Befehl dar.
  3. Eingabe und Ausgabe konfigurieren:
    Sie können die standardmäßigen Ein- und Ausgangsströme für die Sitzung konfigurieren. Beispielsweise können Sie die Ausgabe an einen bytes.Buffer umleiten, um die Befehlsergebnisse zu erfassen.
  4. Führen Sie den Befehl aus:
    Verwenden Sie die Funktion „session.Run“, um den gewünschten Befehl auszuführen der entfernten Maschine. Diese Funktion blockiert, bis der Befehl abgeschlossen ist.

Hier ist eine Beispielfunktion, die zeigt, wie ein Remote-Befehl ausgeführt und seine Ausgabe zurückgegeben wird:

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
}
Nach dem Login kopieren

Diese Funktion kann dazu verwendet werden Führen Sie Befehle auf Remote-Computern aus und bieten Sie so eine bequeme Möglichkeit, Systemverwaltungsaufgaben über Golang-CLI-Skripte zu automatisieren.

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

Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage