SOCKS dialeris nodrošina transportu; SSH pakotne veic SSH rokasspiedienu pa to. Vēlāks ssh.Dial izsaukums izveidotu atsevišķu savienojumu, nevis izmantotu šo transportu.

Palīgfunkcija lietotnē, kas jau izmanto x/net/proxy un x/crypto/ssh, var atgriezt konfigurēto SSH klientu:

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
}

Pakotņu nosaukumi šeit ir golang.org/x/net/proxy un golang.org/x/crypto/ssh. proxyAddr norāda SOCKS klausītāju; sshAddr norāda galīgo serveri kā host:port.

config norādiet lietotnes parasto SSH lietotāju, autentifikācijas metodes un HostKeyCallback. Pakotne knownhosts var izveidot šo callback no uzticamas known_hosts datnes. Nododiet galamērķa resursdatora nosaukumu NewClientConn, lai resursdatora atslēgas salīdzināšana izmantotu paredzēto SSH identitāti.

Arguments nil neizvēlas nekādus SOCKS akreditācijas datus. Atļautiem publiskiem SSH galamērķiem ieraksts bez konta no SOCKS5 starpniekserveru saraksta var nodrošināt proxyAddr, ja tas atļauj faktisko SSH resursdatoru un portu. Ja nepieciešams, nododiet proxy.Auth ar starpniekservera kontu; SSH autentifikācija paliek config.

NewClient saņem NewClientConn atgrieztās ienākošās kanālu un pieprasījumu plūsmas un pārvalda šo klienta mehānismu. Aizveriet atgriezto SSH klientu, kad tā darbs beidzas. Savienojumu apstrādei ražošanā nepieciešama arī ierobežota savienošanās un rokasspiediena politika; šī palīgfunkcija tikai ilustrē transporta nodošanu.

Saistītie raksti