Gi Go SSH-klienten forbindelsen SOCKS har åpnet
Koble til SSH-målet med x/net/proxy og initialiser deretter x/crypto/ssh på den resulterende net.Conn.
SOCKS-dialeren leverer transporten; SSH-pakken utfører SSH-håndtrykket over den. Et kall til ssh.Dial etterpå ville lage en egen forbindelse i stedet for å bruke den transporten.
En hjelpefunksjon i et program som allerede bruker 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
}Pakkenavnene her er golang.org/x/net/proxy og golang.org/x/crypto/ssh. proxyAddr angir SOCKS-lytteren; sshAddr angir den endelige serveren som host:port.
Oppgi i config programmets vanlige SSH-bruker, godkjenningsmetoder og HostKeyCallback. Pakken knownhosts kan bygge denne callbacken fra en klarert known_hosts-fil. Send vertsnavnet for målet til NewClientConn slik at vertsnøkkelsammenligningen bruker den tiltenkte SSH-identiteten.
Argumentet nil velger ingen SOCKS-legitimasjon. For tillatte offentlige SSH-mål kan en oppføring uten konto fra SOCKS5-proxylisten skaffe proxyAddr hvis den tillater den faktiske SSH-verten og -porten. Når det kreves, send en proxy.Auth med proxykontoen; SSH-godkjenningen blir i config.
NewClient mottar de innkommende kanal- og forespørselsstrømmene som NewClientConn returnerer, og håndterer den klientmekanikken. Lukk den returnerte SSH-klienten når arbeidet er ferdig. Forbindelseshåndtering i produksjon krever også begrenset tilkobling og retningslinjer for håndtrykk; denne hjelpefunksjonen illustrerer bare overleveringen av transporten.