Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah anda membuat port SSH mudah ke hadapan di Golang?

Bagaimanakah anda membuat port SSH mudah ke hadapan di Golang?

Patricia Arquette
Patricia Arquetteasal
2024-11-04 10:28:01800semak imbas

How do you create a simple SSH port forward in Golang?

SSH Port Forward Mudah di Golang

Dalam artikel ini, kami akan meneroka cara mencipta port SSH mudah ke hadapan, membolehkan anda menyambung ke port jauh dari mesin tempatan anda.

Mencipta Port Hadapan

Untuk mencipta port ke hadapan, anda perlu mewujudkan sambungan SSH dan mendengar pada port tempatan . Setelah sambungan dibuat, anda boleh memajukan data antara port tempatan dan jauh.

Berikut ialah panduan langkah demi langkah:

  1. Sediakan konfigurasi SSH: Cipta objek ssh.ClientConfig dengan maklumat pengesahan yang diperlukan (nama pengguna, kata laluan, alamat pelayan).
  2. Dengar pada port tempatan: Cipta objek net.Listener untuk mendengar masuk sambungan pada port tempatan yang dikehendaki.
  3. Terima sambungan masuk: Gunakan kaedah listener.Accept() untuk menerima sambungan tempatan masuk.
  4. Sambung ke alat kawalan jauh pelayan: Gunakan objek ssh.ClientConfig yang disediakan untuk mewujudkan sambungan SSH ke pelayan jauh.
  5. Sambung ke port jauh: Wujudkan sambungan ke port jauh yang ditentukan pada pelayan.
  6. Majukan data: Gunakan io.Copy() untuk terus memajukan data daripada sambungan setempat ke sambungan jauh dan begitu juga sebaliknya.

Kod Contoh

Kod Go berikut menunjukkan langkah-langkah ini:

<code class="go">package main

import (
    "io"
    "log"
    "net"
    "golang.org/x/crypto/ssh"
)

func forward(localConn net.Conn, config *ssh.ClientConfig, remoteAddr string) {
    sshClientConn, err := ssh.Dial("tcp", "remote.example.com:22", config)
    if err != nil {
        log.Fatalf("ssh.Dial failed: %s", err)
    }

    sshConn, err := sshClientConn.Dial("tcp", remoteAddr)
    if err != nil {
        log.Fatalf("sshClientConn.Dial failed: %s", err)
    }

    go io.Copy(sshConn, localConn)
    go io.Copy(localConn, sshConn)
}

func main() {
    config := &ssh.ClientConfig{
        User: "username",
        Auth: []ssh.AuthMethod{
            ssh.Password("password"),
        },
    }

    listener, err := net.Listen("tcp", "local.example.com:9000")
    if err != nil {
        log.Fatalf("net.Listen failed: %s", err)
    }

    for {
        localConn, err := listener.Accept()
        if err != nil {
            log.Fatalf("listener.Accept failed: %s", err)
        }

        go forward(localConn, config, "remote.example.com:9999")
    }
}</code>

Dengan mengikuti langkah-langkah ini dan menggunakan kod yang disediakan, anda boleh mencipta port SSH yang mudah tetapi berkesan ke hadapan dan akses perkhidmatan jauh daripada mesin tempatan anda dengan mudah.

Atas ialah kandungan terperinci Bagaimanakah anda membuat port SSH mudah ke hadapan di Golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn