SOCKS-dialer annab transpordi; SSH-pakett teeb selle peal SSH-kätluse. Hilisem ssh.Dial kutse looks eraldi ühenduse, selle asemel et seda transporti kasutada.

Abifunktsioon rakenduses, mis juba kasutab x/net/proxy ja x/crypto/ssh, saab tagastada seadistatud SSH-kliendi:

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
}

Pakettide nimed on siin golang.org/x/net/proxy ja golang.org/x/crypto/ssh. proxyAddr määrab SOCKS-kuulaja; sshAddr määrab lõppserveri kujul host:port.

Anna config-is rakenduse tavaline SSH-kasutaja, autentimismeetodid ja HostKeyCallback. Pakett knownhosts saab selle callbacki usaldusväärsest known_hosts-failist ehitada. Edasta sihtkoha hostinimi NewClientConn-ile, et hostivõtme võrdlus kasutaks kavandatud SSH-identiteeti.

Argument nil ei vali ühtegi SOCKS-i mandaati. Lubatud avalike SSH-sihtkohtade jaoks võib kontota kirje SOCKS5-puhverserverite loendist anda proxyAddr, kui see lubab tegelikku SSH-hosti ja -porti. Vajadusel edasta proxy.Auth koos puhverserveri kontoga; SSH-autentimine jääb config-i.

NewClient võtab vastu NewClientConn-i tagastatud sissetulevad kanali- ja päringuvood ning haldab seda kliendimehhanismi. Sulge tagastatud SSH-klient, kui selle töö lõpeb. Tootmiskeskkonnas vajab ühenduste käsitlemine ka piiratud ühenduse loomist ja kätluspoliitikat; see abifunktsioon näitab ainult transpordi üleandmist.

Seotud artiklid