golang ssh隧道 socks5服务器

package main

import (
    "context"
    "fmt"
    "net"
    "os"
    "os/signal"
    "syscall"

    "github.com/armon/go-socks5"
    "golang.org/x/crypto/ssh"
)

func main() {
    sshAddress := "10.0.0.11:22"
    socks5Address := "localhost:1080" // open socks5 connection

    sshConf := &ssh.ClientConfig{
        User:            "root",
        Auth:            []ssh.AuthMethod{ssh.Password("SSH_PASSWORD_HERE")},
        HostKeyCallback: ssh.InsecureIgnoreHostKey(),
    }
    sshConn, err := ssh.Dial("tcp", sshAddress, sshConf)
    if err != nil {
        fmt.Println("error tunnel to server: ", err)
        return
    }
    defer sshConn.Close()

    fmt.Println("connected to ssh server")

    go func() {
        conf := &socks5.Config{
            Dial: func(ctx context.Context, network, addr string) (net.Conn, error) {
                return sshConn.Dial(network, addr)
            },
        }

        serverSocks, err := socks5.New(conf)
        if err != nil {
            fmt.Println(err)
            return
        }

        if err := serverSocks.ListenAndServe("tcp", socks5Address); err != nil {
            fmt.Println("failed to create socks5 server", err)
        }
    }()

    ch := make(chan os.Signal)
    signal.Notify(ch, syscall.SIGINT, syscall.SIGTERM)
    <-ch

    return
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容