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