美文网首页
golang ssh隧道 socks5服务器

golang ssh隧道 socks5服务器

作者: Spooking | 来源:发表于2022-04-03 22:16 被阅读0次
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
}

相关文章

网友评论

      本文标题:golang ssh隧道 socks5服务器

      本文链接:https://www.haomeiwen.com/subject/dpjqsrtx.html