SOCKS-dialeren leverer transporten; SSH-pakken gjer SSH-handtrykket over han. Eit kall til ssh.Dial etterpå ville lage eit eige samband i staden for å bruke den transporten.

Ein hjelpefunksjon i eit program som alt brukar x/net/proxy og x/crypto/ssh kan returnere den konfigurerte SSH-klienten:

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
}

Pakkenamna her er golang.org/x/net/proxy og golang.org/x/crypto/ssh. proxyAddr peikar på SOCKS-lyttaren; sshAddr peikar på den endelege tenaren som host:port.

Oppgi i config den vanlege SSH-brukaren til programmet, godkjenningsmetodar og HostKeyCallback. Pakken knownhosts kan byggje denne callbacken frå ei klarert known_hosts-fil. Send vertsnamnet til målet til NewClientConn slik at vertsnøkkelsamanlikninga brukar den tiltenkte SSH-identiteten.

Argumentet nil vel ingen SOCKS-legitimasjon. For tillatne offentlege SSH-mål kan ein oppføring utan konto frå SOCKS5-proxylista skaffe proxyAddr om han tillèt den faktiske SSH-verten og -porten. Når det trengst, send ein proxy.Auth med proxykontoen; SSH-godkjenninga blir i config.

NewClient tek imot dei innkomande kanal- og førespurnadsstraumane som NewClientConn returnerer, og handterer den klientmekanikken. Lukk den returnerte SSH-klienten når arbeidet er ferdig. Sambandshandtering i produksjon krev òg avgrensa kopling og retningslinjer for handtrykk; denne hjelpefunksjonen syner berre overleveringa av transporten.

Relaterte artiklar