Klicatelj SOCKS zagotavlja transport; paket SSH na njem izvede rokovanje SSH. Poznejši klic ssh.Dial bi ustvaril ločeno povezavo, namesto da bi uporabil ta transport.

Pomožna funkcija v aplikaciji, ki že uporablja x/net/proxy in x/crypto/ssh, lahko vrne nastavljenega odjemalca SSH:

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
}

Imena paketov sta tukaj golang.org/x/net/proxy in golang.org/x/crypto/ssh. proxyAddr označuje poslušalca SOCKS; sshAddr označuje končni strežnik kot host:port.

V config navedite običajnega uporabnika SSH aplikacije, metode preverjanja pristnosti in HostKeyCallback. Paket knownhosts lahko ta callback zgradi iz zaupanja vredne datoteke known_hosts. Posredujte ime gostitelja cilja v NewClientConn, da primerjanje ključa gostitelja uporabi predvideno identiteto SSH.

Argument nil ne izbere nobenih poverilnic SOCKS. Za dovoljene javne cilje SSH lahko vnos brez računa s seznama posrednikov SOCKS5 zagotovi proxyAddr, če dovoljuje dejanski gostitelj in vrata SSH. Ko je potrebno, posredujte proxy.Auth z računom posrednika; preverjanje pristnosti SSH ostane v config.

NewClient sprejme dohodne tokove kanalov in zahtev, ki jih vrne NewClientConn, ter upravlja to mehaniko odjemalca. Zaprite vrnjenega odjemalca SSH, ko se njegovo delo konča. Ravnanje s povezavami v produkciji potrebuje tudi omejeno vzpostavljanje in politiko rokovanja; ta pomožna funkcija le ponazarja predajo transporta.

Sorodni članki