De SOCKS-dialer leveret it transport; it SSH-pakket docht de SSH-hânskuteling deroer. In oprop nei ssh.Dial soe dêrnei in aparte ferbining meitsje ynstee fan dat transport te brûken.

In helpfunksje yn in applikaasje dy't al x/net/proxy en x/crypto/ssh brûkt, kin de konfigurearre SSH-klant weromjaan:

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
}

De pakketnammen hjir binne golang.org/x/net/proxy en golang.org/x/crypto/ssh. proxyAddr wiist de SOCKS-harker oan; sshAddr wiist de úteinlike server oan as host:port.

Jou yn config de gewoane SSH-brûker fan 'e applikaasje, de autentikaasjemetoaden en HostKeyCallback. It pakket knownhosts kin dy callback bouwe út in fertroud known_hosts-bestân. Jou de hostnamme fan it doel oan NewClientConn, sadat it ferlykjen fan 'e hostkaai de bedoelde SSH-identiteit brûkt.

It nil-argumint kiest gjin SOCKS-gegevens. Foar tastiene iepenbiere SSH-doelen kin in yngong sûnder akkount út 'e SOCKS5-proksylist proxyAddr leverje as dy de echte SSH-host en -poarte tastiet. As it nedich is, jou dan in proxy.Auth mei it proksyakkoart; SSH-autentikaasje bliuwt yn config.

NewClient ûntfangt de ynkommende kanaal- en oanfraachstreamen dy't NewClientConn weromjout en beheart dy klantmasjinerie. Slút de weromjûne SSH-klant as syn wurk dien is. Ferbiningsôfhanneling yn produksje freget ek beheind dialbelied en hânskutelingsbelied; dizze helpfunksje yllustrearret allinnich it oerjaan fan it transport.

Relatearre artikelen