SOCKS-dialarin veitir flutningin; SSH-pakkin ger SSH-handtak á honum. At kalla ssh.Dial aftaná hevði gjørt eitt serstakt samband í staðin fyri at brúka henda flutningin.

Ein hjálparfunksjón í eini app, sum longu brúkar x/net/proxy og x/crypto/ssh, kann lata tað uppsetta SSH-klientina aftur:

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
}

Pakkanøvnini her eru golang.org/x/net/proxy og golang.org/x/crypto/ssh. proxyAddr vísir á SOCKS-lyttaran; sshAddr vísir á endaliga servaran sum host:port.

Lat vanliga SSH-brúkaran hjá appini, samváttanarhættir og HostKeyCallback í config. Pakkin knownhosts kann byggja tað callback úr eini álítandi known_hosts-fílu. Lat máldátuhostnavnið til NewClientConn, so host-lyklaparingin brúkar tað ætlaða SSH-sjálvsdømið.

nil-argumentið velur ongar SOCKS-innlatingar. Fyri loyvd almenn SSH-mál kann ein postur uttan kontu úr SOCKS5-proxylistanum veita proxyAddr, um hann loyvir veruliga SSH-hostinum og portinum. Tá tað er neyðugt, lat eitt proxy.Auth við proxy-kontuni; SSH-samváttanin verður verandi í config.

NewClient tekur ímóti innkomandi kanal- og spurningstreymunum, sum NewClientConn letur aftur, og stýrir tí klientmekanikkinum. Lat SSH-klientina aftur, tá arbeiðið er liðugt. Sambandshandtering í framleiðslu krevur eisini avmarkaða ringing og handtaksreglu; henda hjálparfunksjónin vísir bert handarin av flutninginum.

Skyldar greinar