Rumah pembangunan bahagian belakang Golang Bagaimanakah saya boleh melaksanakan pemajuan port SSH dalam Go?

Bagaimanakah saya boleh melaksanakan pemajuan port SSH dalam Go?

Nov 05, 2024 am 02:12 AM

How can I implement SSH port forwarding in Go?

Pemajuan Port SSH Mudah dalam Go

Dalam artikel ini, kami akan menyelidiki tentang mencipta dan menutup port TCP asas ke hadapan melalui SSH menggunakan Pergi, khusus untuk pendatang baharu Go dan bahasa yang ditaip secara statik. Kami akan menyediakan penyelesaian yang jelas dan ringkas dengan membahagikan proses kepada langkah-langkah yang boleh difahami.

Latar Belakang dan Matlamat

Kami berhasrat untuk meniru kefungsian perintah terminal seperti "ssh -L 9000:localhost:9999 nama pengguna@pelayan" secara pemrograman menggunakan Go. Perintah ini menetapkan port ke hadapan dari port tempatan 9000 ke port jauh 9999 pada pelayan yang ditentukan.

Garis Penyelesaian

Untuk mencapai ini, kami akan mencipta pendengar tempatan pada port 9000 dan sediakan sambungan klien SSH dengan pelayan jauh. Apabila port tempatan menerima permintaan, kami akan mewujudkan sambungan ke port jauh dan memajukan data ke sana ke mari.

Pecahan Kod

<code class="go">package main

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

var (
    username         = "root"
    password         = "password"
    serverAddrString = "192.168.1.100:22"
    localAddrString  = "localhost:9000"
    remoteAddrString = "localhost:9999"
)

func forward(localConn net.Conn, config *ssh.ClientConfig) {
    sshClientConn, err := ssh.Dial("tcp", serverAddrString, config)
    if err != nil {
        log.Fatalf("ssh.Dial failed: %s", err)
    }
    sshConn, err := sshClientConn.Dial("tcp", remoteAddrString)
    go func() { _, err = io.Copy(sshConn, localConn) }()
    go func() { _, err = io.Copy(localConn, sshConn) }()
}

func main() {
    config := &ssh.ClientConfig{
        User: username,
        Auth: []ssh.AuthMethod{
            ssh.Password(password),
        },
    }
    localListener, err := net.Listen("tcp", localAddrString)
    if err != nil {
        log.Fatalf("net.Listen failed: %v", err)
    }
    for {
        localConn, err := localListener.Accept()
        if err != nil {
            log.Fatalf("listen.Accept failed: %v", err)
        }
        go forward(localConn, config)
    }
}</code>

Penjelasan

  • Kami mencipta pendengar setempat pada port 9000 (localAddrString).
  • Apabila sambungan dibuat ke port tempatan, kami mewujudkan sambungan klien SSH ke pelayan (sshClientConn).
  • Kami kemudian menyambung ke port jauh pada pelayan (sshConn).
  • Gorouti berasingan digunakan untuk menyalin data daripada sambungan tempatan ke sambungan SSH dan begitu juga sebaliknya .
  • Ini membolehkan data dimajukan antara port tempatan dan jauh.

Atas ialah kandungan terperinci Bagaimanakah saya boleh melaksanakan pemajuan port SSH dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
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

Alat AI Hot

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Panduan pemula ' s ke Rimworld: Odyssey
1 bulan yang lalu By Jack chen
Skop pembolehubah PHP dijelaskan
4 minggu yang lalu By 百草
Petua untuk menulis komen php
3 minggu yang lalu By 百草
Mengulas kod dalam php
3 minggu yang lalu By 百草

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Tutorial PHP
1509
276
Cara membina pelayan web di mana sahaja Cara membina pelayan web di mana sahaja Jul 15, 2025 am 03:05 AM

Ia tidak sukar untuk membina pelayan web yang ditulis dalam Go. Inti terletak pada menggunakan pakej NET/HTTP untuk melaksanakan perkhidmatan asas. 1. Gunakan NET/HTTP untuk memulakan pelayan yang paling mudah: fungsi pemprosesan mendaftar dan mendengar port melalui beberapa baris kod; 2. 3. Amalan Umum: Routing Kumpulan oleh Modul Fungsional, dan gunakan perpustakaan pihak ketiga untuk menyokong padanan kompleks; 4. Perkhidmatan Fail Statik: Sediakan fail HTML, CSS dan JS melalui http.fileserver; 5. Prestasi dan Keselamatan: Aktifkan HTTPS, hadkan saiz badan permintaan, dan tetapkan masa tamat untuk meningkatkan keselamatan dan prestasi. Selepas menguasai perkara -perkara utama ini, lebih mudah untuk mengembangkan fungsi.

Pergi untuk pemprosesan audio/video Pergi untuk pemprosesan audio/video Jul 20, 2025 am 04:14 AM

Inti pemprosesan audio dan video terletak pada pemahaman proses asas dan kaedah pengoptimuman. 1. Proses asas termasuk pengambilalihan, pengekodan, penghantaran, penyahkodan dan main balik, dan setiap pautan mempunyai kesukaran teknikal; 2. Masalah biasa seperti penyimpangan audio dan video, kelewatan lag, bunyi bunyi, gambar kabur, dan lain -lain boleh diselesaikan melalui pelarasan segerak, pengoptimuman pengekodan, modul pengurangan hingar, pelarasan parameter, dan sebagainya; 3. Adalah disyorkan untuk menggunakan FFMPEG, OpenCV, WebRTC, GSTREAMER dan alat lain untuk mencapai fungsi; 4. Dari segi pengurusan prestasi, kita harus memberi perhatian kepada pecutan perkakasan, penetapan kadar bingkai resolusi yang munasabah, masalah konvensyen dan masalah kebocoran memori. Menguasai perkara utama ini akan membantu meningkatkan kecekapan pembangunan dan pengalaman pengguna.

Pergi pilih dengan kes lalai Pergi pilih dengan kes lalai Jul 14, 2025 am 02:54 AM

Tujuan Select Plus Default adalah untuk membolehkan Pilih untuk melakukan tingkah laku lalai apabila tiada cawangan lain yang bersedia untuk mengelakkan penyekatan program. 1. Apabila menerima data dari saluran tanpa menyekat, jika saluran kosong, ia akan terus memasuki cawangan lalai; 2. Dalam kombinasi dengan masa. Selepas atau ticker, cuba hantar data dengan kerap. Jika saluran penuh, ia tidak akan menyekat dan melangkau; 3. Mencegah kebuntuan, elakkan program terperangkap apabila tidak pasti sama ada saluran ditutup; Apabila menggunakannya, sila ambil perhatian bahawa cawangan lalai akan dilaksanakan dengan serta -merta dan tidak boleh disalahgunakan, dan lalai dan kes saling eksklusif dan tidak akan dilaksanakan pada masa yang sama.

Membangunkan pengendali Kubernet di mana sahaja Membangunkan pengendali Kubernet di mana sahaja Jul 25, 2025 am 02:38 AM

Cara yang paling berkesan untuk menulis Kubernetesoperator adalah untuk menggunakan Go untuk menggabungkan Kubebuilder dan pengawal-runtime. 1. Memahami corak pengendali: Tentukan sumber tersuai melalui CRD, tulis pengawal untuk mendengar perubahan sumber dan lakukan gelung perdamaian untuk mengekalkan keadaan yang diharapkan. 2. Gunakan Kubebuilder untuk memulakan projek dan membuat API untuk menghasilkan CRD, pengawal dan konfigurasi secara automatik. 3. Tentukan spec dan struktur status CRD dalam API/V1/MYAPP_TYPES.GO, dan menjalankan makeManifests untuk menjana cRDYAML. 4. Daftar masuk dalam pengawal

Contoh API GO REST Contoh API GO REST Jul 14, 2025 am 03:01 AM

Bagaimana dengan cepat melaksanakan contoh Restapi yang ditulis dalam GO? Jawapannya adalah menggunakan perpustakaan standard Net/HTTP, yang boleh diselesaikan mengikut tiga langkah berikut: 1. Sediakan struktur projek dan memulakan modul; 2. Tentukan struktur data dan fungsi pemprosesan, termasuk mendapatkan semua data, mendapatkan data tunggal berdasarkan ID, dan membuat data baru; 3. Daftar laluan dalam fungsi utama dan mulakan pelayan. Seluruh proses tidak memerlukan perpustakaan pihak ketiga. Fungsi Restapi Asas dapat direalisasikan melalui perpustakaan standard dan boleh diuji melalui penyemak imbas atau pos.

Cara Membuat Permintaan HTTP Di Perjalanan Cara Membuat Permintaan HTTP Di Perjalanan Jul 14, 2025 am 02:48 AM

Kaedah memulakan permintaan HTTP di GO adalah seperti berikut: 1. Gunakan http.get () untuk memulakan permintaan GET yang paling mudah, ingat untuk mengendalikan kesilapan dan menutup badan; 2. Gunakan http.post () atau http.newRequest () untuk menghantar permintaan pos, dan anda boleh menetapkan data JSON atau membentuk data; 3. Tetapkan masa tamat, header dan cookies, tamat masa kawalan dan header.Set untuk menambah tajuk tersuai melalui pelanggan, dan gunakan Cookiejar untuk mengurus kuki secara automatik; 4. Nota termasuk perlu menutup badan, objek bukan semula, dan menetapkan pengguna-AG

Teknik Pengoptimuman Permintaan Pergi untuk PostgreSQL/MySQL Teknik Pengoptimuman Permintaan Pergi untuk PostgreSQL/MySQL Jul 19, 2025 am 03:56 AM

TooptimizegoapplicationsInteractingWithPostgreSqlormysql, focusonindexing, selectivequeries, connectionhandling, caching, andormefficiency.1) useproperIndexing-identifyfrequeriedcolumns, addIndExessely, andusecompositeindexesformultifulty-columnuerformultiulti

Pernyataan Defer Ditangguhkan dijelaskan Pernyataan Defer Ditangguhkan dijelaskan Jul 14, 2025 am 02:57 AM

Fungsi teras penangguhan adalah untuk menangguhkan pelaksanaan panggilan fungsi sehingga fungsi semasa pulangan, yang sering digunakan untuk pembersihan sumber. Khususnya, ia termasuk: 1. Pastikan fail, sambungan rangkaian, kunci dan sumber lain dikeluarkan tepat pada masanya; 2. Perintah pelaksanaan adalah kemudian-pertama-keluar (LIFO), dan penangguhan yang ditakrifkan terakhir dilaksanakan terlebih dahulu; 3. Parameter ditentukan apabila tertunda ditakrifkan, dan dinilai semasa pelaksanaan. Jika perubahan berubah diperlukan, penutupan atau petunjuk boleh digunakan; 4. Elakkan penyalahgunaan tertunda dalam gelung dan mencegah pengumpulan sumber daripada dibebaskan tepat pada masanya.

See all articles