SOCKS-hringirinn sér um flutninginn; SSH-pakkinn framkvæmir SSH-handtakið yfir hann. Kall á ssh.Dial eftir á myndi búa til sér samband í stað þess að nota þennan flutning.

Hjálparfall í forriti sem notar þegar x/net/proxy og x/crypto/ssh getur skilað uppsetta SSH-biðlaranum:

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öfnin hér eru golang.org/x/net/proxy og golang.org/x/crypto/ssh. proxyAddr tilgreinir SOCKS-hlustarann; sshAddr tilgreinir lokaveitinn sem host:port.

Gefðu upp í config venjulegan SSH-notanda forritsins, auðkenningaraðferðir og HostKeyCallback. knownhosts-pakkinn getur byggt það callback úr traustri known_hosts-skrá. Sendu vélarheiti áfangastaðarins í NewClientConn svo vélarlyklapörun noti fyrirhugaða SSH-auðkennina.

nil-viðfangið velur engin SOCKS-auðkenni. Fyrir leyfða opinbera SSH-áfangastaði getur færsla án reiknings úr SOCKS5-milliliðalistanum veitt proxyAddr ef hún leyfir raunverulega SSH-vélina og portið. Þegar þarf, sendu proxy.Auth með milliliðareikningnum; SSH-auðkenningin verður áfram í config.

NewClient tekur við innkomandi rásar- og beiðnistraumum sem NewClientConn skilar og annast þá biðlaravél. Lokaðu skilaða SSH-biðlaranum þegar vinnu hans lýkur. Sambandameðferð í framleiðslu þarf einnig afmarkaða hringingu og handtakastefnu; þetta hjálparfall sýnir aðeins afhendingu flutningsins.

Tengdir greinar