Heim > Backend-Entwicklung > Golang > Wie kann ich mit x/crypto/ssh von Go eine SSH-Verbindung zu einer privaten Instanz über einen Bastion-Host herstellen?

Wie kann ich mit x/crypto/ssh von Go eine SSH-Verbindung zu einer privaten Instanz über einen Bastion-Host herstellen?

Linda Hamilton
Freigeben: 2024-12-05 02:18:10
Original
442 Leute haben es durchsucht

How to SSH into a Private Instance via a Bastion Host Using Go's x/crypto/ssh?

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

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

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

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

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!

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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage