Ang SOCKS dialer ang nagbibigay ng transport; ang SSH package ang gumagawa ng SSH handshake sa ibabaw nito. Ang pagtawag sa ssh.Dial pagkatapos ay gagawa ng hiwalay na koneksyon sa halip na gamitin ang transport na iyon.

Ang helper na function sa isang application na gumagamit na ng x/net/proxy at x/crypto/ssh ay maaaring magbalik ng naka-configure na SSH client:

func dialSSHViaSOCKS(proxyAddr, sshAddr string,
    config *ssh.ClientConfig) (*ssh.Client, error) {
    dialer, err := proxy.SOCKS5("tcp", proxyAddr, nil, proxy.Direct)
    if err != nil {
        return nil, err
    }

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

    transport, channels, requests, err :=
        ssh.NewClientConn(conn, sshAddr, config)
    if err != nil {
        conn.Close()
        return nil, err
    }

    return ssh.NewClient(transport, channels, requests), nil
}

Ang mga pangalan ng package dito ay golang.org/x/net/proxy at golang.org/x/crypto/ssh. Tinutukoy ng proxyAddr ang SOCKS listener; tinutukoy ng sshAddr ang huling server bilang host:port.

Ibigay sa config ang karaniwang SSH user ng application, mga paraan ng authentication at HostKeyCallback. Ang knownhosts package ay makakabuo ng callback na iyon mula sa pinagkakatiwalaang known_hosts file. Ipasa ang hostname ng destinasyon sa NewClientConn upang ang pagtutugma ng host key ay gumamit ng sinadyang SSH identity.

Ang argumentong nil ay hindi pumipili ng anumang SOCKS credentials. Para sa pinapayagang pampublikong destinasyong SSH, ang entry na walang account mula sa listahan ng SOCKS5 proxy ay makapagbibigay ng proxyAddr kung pinapayagan nito ang aktwal na SSH host at port. Kapag kailangan, ipasa ang proxy.Auth na may account ng proxy; ang SSH authentication ay nananatili sa config.

Tinatanggap ng NewClient ang mga papasok na stream ng channel at request na ibinabalik ng NewClientConn at pinangangasiwaan ang mekanismong iyon ng client. Isara ang ibinalik na SSH client kapag tapos na ang trabaho nito. Ang paghawak ng koneksyon sa produksyon ay nangangailangan din ng limitadong dialing at patakaran sa handshake; ang helper na ito ay naglalarawan lamang ng paglipat ng transport.

Kaugnay na mga artikulo