如何将远程ssh服务器与socks代理连接?

安德烈·安东诺夫(Andrey Antonov):
package main

import (
    "errors"
    "fmt"
    "net"

    "golang.org/x/crypto/ssh"
)

var (
    socks    string = "127.0.0.1:8000"
    server   string = "192.168.1.1:2222"
    cmd      string = ""
    login    string = "root"
    password string = ""
)

func main() {
    c, err := netConn(socks)
    if err != nil {
        fmt.Println(err)
    }
    conf := &ssh.ClientConfig{
        User: login,
        Auth: []ssh.AuthMethod{
            ssh.Password(password),
        },
    }
    client, err := Dialer(conf, c, server)
    if err != nil {
        fmt.Println(err)
    }
    session, err := client.NewSession()
    defer session.Close()
    if err != nil {
        fmt.Println(err)
    }
    session.Run(cmd)
}

func netConn(addr string) (net.Conn, error) {
    conn, err := net.Dial("tcp", addr)
    if err != nil {
        return nil, errors.New(fmt.Sprintf("Unable to connect to %v", err))
    }
    return conn, nil
}

func Dialer(conf *ssh.ClientConfig, c net.Conn, host string) (*ssh.Client, error) {
    conn, chans, reqs, err := ssh.NewClientConn(c, host, conf)
    if err != nil {
        return nil, err
    }
    return ssh.NewClient(conn, chans, reqs), nil
}

客户恐慌

ssh:握手失败:EOF

紧急:运行时错误:无效的内存地址或nil指针取消引用

[信号0xb代码= 0x1地址= 0x0 pc = 0x80f3e2d]

goroutine 1 [运行中]:

紧急(0x8201b60,0x18522030)

/usr/lib/go/src/runtime/panic.go:464 + 0x326

golang.org/x/crypto/ssh.(*Client).NewSession(0x0、0x1、0x0、0x0)

/home/user/go/src/golang.org/x/crypto/ssh/client.go:129 + 0xcd

main.main()

/home/user/go/src/ss/i.go:34 + 0x276

和袜子服务器在日志中

[ERR]袜子:不支持的SOCKS版本:[83]

我如何使其可行?谢谢。

danmux:

您可以x/net/proxy按以下方式使用该软件包:

package main

import (
    "log"

    "golang.org/x/crypto/ssh"
    "golang.org/x/net/proxy"
)

func main() {

    sshConfig := &ssh.ClientConfig{
        User: "user",
        // Auth: .... fill out with keys etc as normal
    }

    client, err := proxiedSSHClient("127.0.0.1:8000", "127.0.0.1:22", sshConfig)
    if err != nil {
        log.Fatal(err)
    }

    // get a session etc...
}

func proxiedSSHClient(proxyAddress, sshServerAddress string, sshConfig *ssh.ClientConfig) (*ssh.Client, error) {
    dialer, err := proxy.SOCKS5("tcp", proxyAddress, nil, proxy.Direct)
    if err != nil {
        return nil, err
    }

    conn, err := dialer.Dial("tcp", sshServerAddress)
    if err != nil {
        return nil, err
    }

    c, chans, reqs, err := ssh.NewClientConn(conn, sshServerAddress, sshConfig)
    if err != nil {
        return nil, err
    }

    return ssh.NewClient(c, chans, reqs), nil
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用ssh将远程服务器变量存储到本地服务器变量?

当没有Internet连接时,如何将扩展安装到VS Code服务器(即Remote-SSH的远程端)中?

如何将pika连接到RabbitMQ远程服务器?(蟒蛇皮卡)

如何将远程Python FTP服务器连接到本地Python FTP客户端

如何将Atom编辑器与远程服务器连接?

使用python连接到远程服务器,添加代理

通过SOCKS5代理连接到SSH服务器

如何将SSH命令保护到Laravel中的远程服务器?

将Tor配置为可以远程连接的侦听代理服务器?

如何通过SSH连接通过远程服务器连接到Internet

如何将变量从本地服务器传递到远程服务器?

如何查看服务器上的远程SSH连接?

SOCKS代理到HTTP代理后面的SSH服务器

如何将git存储库的COPY(归档文件,而不是克隆文件)连接到其远程服务器?

如何将SOCKS启用到SSH支持的服务器

如何通过http代理(80端口)访问远程ssh服务器?

通过代理服务器自动进行SSH连接

如何连接到不带ssh的远程X服务器?

如何将连接从Nginx传递到另一台服务器(反向代理?)

通过公司代理连接到SSH服务器

如何将私钥从远程服务器正确复制到我的本地计算机,以便可以使用ssh连接

如何将文件从远程ubuntu服务器传输到远程ubuntu服务器?

如何将Rest Webservices服务器与MFP服务器连接?

如何通过SSH将本地虚拟机连接到远程服务器?

如何将文件从 SSH 远程主机复制到 Jenkins 服务器。sshpass 不起作用

如何将安卓与本地服务器连接?

如何连接与远程服务器的反应

如何使用 Jenkinsfile 将文件从 Jenkins 代理节点复制到远程服务器

jenkins ssh 代理无法将战争复制到远程服务器