Giv Go SSH-klienten den forbindelse, som SOCKS har åbnet
Forbind til SSH-destinationen med x/net/proxy, og initialiser derefter x/crypto/ssh på den resulterende net.Conn.
SOCKS-dialeren leverer transporten; SSH-pakken udfører SSH-håndtrykket over den. Et kald til ssh.Dial bagefter ville skabe en separat forbindelse i stedet for at bruge den transport.
En hjælpefunktion i et program, der allerede bruger x/net/proxy og x/crypto/ssh, kan returnere den konfigurerede SSH-klient:
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 angiver SOCKS-lytteren; sshAddr angiver den endelige server som host:port.
Angiv i config programmets sædvanlige SSH-bruger, godkendelsesmetoder og HostKeyCallback. Pakken knownhosts kan bygge det callback ud fra en betroet known_hosts-fil. Send destinationsværtsnavnet til NewClientConn, så værtsnøgleafstemningen bruger den tilsigtede SSH-identitet.
Argumentet nil vælger ingen SOCKS-legitimationsoplysninger. For tilladte offentlige SSH-destinationer kan en konto uden login fra SOCKS5-proxylisten levere proxyAddr, hvis den tillader den faktiske SSH-vært og -port. Når det kræves, sendes en proxy.Auth med proxykontoen; SSH-godkendelsen bliver i config.
NewClient modtager de indgående kanal- og anmodningsstrømme, som NewClientConn returnerer, og håndterer den klientmekanik. Luk den returnerede SSH-klient, når dens arbejde er slut. Forbindelseshåndtering i produktion kræver også en afgrænset dialing og håndtrykspolitik; denne hjælpefunktion illustrerer kun transportoverdragelsen.