SSH-Verbindung zur privaten Instanz über Bastion Node mit Go x/crypto/ssh herstellen
Übersicht:
Diese Anleitung zeigt, wie Sie mithilfe von Go eine SSH-Verbindung zu einer privaten Instanz über einen Bastion Node herstellen x/crypto/ssh-Bibliothek.
Szenario:
Betrachten Sie eine AWS VPC mit einem öffentlichen und einem privaten Subnetz. Eine „Bastion“-Instanz wird im öffentlichen Subnetz bereitgestellt, während die „Dienstinstanz“ im privaten Subnetz ausgeführt wird.
Ziel:
Verbindung zur „Dienstinstanz“ herstellen " von einem lokalen Laptop über die „Bastion“, führen Sie Befehle aus und laden Sie sie hoch Dateien.
Lösung:
1. Herstellen der Bastion-Verbindung:
Verwenden Sie die ssh.Dial-Funktion, um eine Verbindung zum Bastion-Host herzustellen:
bClient, err := ssh.Dial("tcp", bastionAddr, config) if err != nil { log.Fatal(err) }
2. Anwählen der Dienstverbindung:
Verwenden Sie die Wählmethode des Bastion-Clients, um eine Verbindung zum Diensthost herzustellen:
conn, err := bClient.Dial("tcp", serviceAddr) if err != nil { log.Fatal(err) }
3. Erstellen des Service-Clients:
Erstellen Sie einen neuen ssh.ClientConn und ssh.Client unter Verwendung der hergestellten Verbindung:
ncc, chans, reqs, err := ssh.NewClientConn(conn, serviceAddr, config) if err != nil { log.Fatal(err) } sClient := ssh.NewClient(ncc, chans, reqs)
4. Verwendung des Service Client:
Der erstellte sClient kann nun zum Ausführen von Befehlen und zum Übertragen von Dateien verwendet werden:
// Run a command on the service instance cmd := sClient.Run("ls -l") output, err := cmd.Output() if err != nil { log.Fatal(err) } fmt.Printf("Output: %s", output) // Upload a file to the service instance f, err := os.Open("./local_file.txt") if err != nil { log.Fatal(err) } defer f.Close() w, err := sClient.NewWriter("service_file.txt") if err != nil { log.Fatal(err) } defer w.Close() if _, err := io.Copy(w, f); err != nil { log.Fatal(err) }
Das obige ist der detaillierte Inhalt vonWie kann ich mit x/crypto/ssh von Go eine SSH-Verbindung zu einer privaten Instanz über einen Bastion-Host herstellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!