SOCKS-dialer tarjoaa kuljetuksen; SSH-paketti tekee SSH-kättelyn sen päällä. Myöhemmin tehty ssh.Dial loisikin erillisen yhteyden sen sijaan, että käyttäisi tätä kuljetusta.

Apuohjelma sovelluksessa, joka käyttää jo x/net/proxy- ja x/crypto/ssh-paketteja, voi palauttaa määritetyn SSH-asiakkaan:

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
}

Pakettien nimet ovat tässä golang.org/x/net/proxy ja golang.org/x/crypto/ssh. proxyAddr yksilöi SOCKS-kuuntelijan; sshAddr yksilöi lopullisen palvelimen muodossa host:port.

Anna configissa sovelluksen tavallinen SSH-käyttäjä, todennusmenetelmät ja HostKeyCallback. knownhosts-paketti voi rakentaa tämän callbackin luotetusta known_hosts-tiedostosta. Välitä kohdeisäntän nimi NewClientConnille, jotta isäntäavaimen täsmäytys käyttää aiottua SSH-identiteettiä.

nil-argumentti ei valitse SOCKS-tunnuksia. Sallituille julkisille SSH-kohteille SOCKS5-välityspalvelinluettelon merkintä ilman tiliä voi tarjota proxyAddrin, jos se sallii todellisen SSH-isännän ja portin. Tarvittaessa välitä proxy.Auth, joka sisältää välityspalvelimen tilin; SSH-todennus pysyy configissa.

NewClient vastaanottaa NewClientConnin palauttamat saapuvat kanava- ja pyyntövirrat ja hoitaa tämän asiakasmekanismin. Sulje palautettu SSH-asiakas, kun sen työ päättyy. Tuotantoyhteyksien käsittely tarvitsee myös rajatun yhdistämisen ja kättelykäytännön; tämä apuohjelma havainnollistaa vain kuljetuksen siirron.

Aiheeseen liittyvät artikkelit