Gee aan Go se SSH-kliënt die verbinding wat SOCKS oopgemaak het
Kies die SSH-bestemming met x/net/proxy en rig dan x/crypto/ssh op die resulterende net.Conn in.
Die SOCKS-kieser verskaf die transport; die SSH-pak doen die SSH-handdruk daaroor. As jy daarna ssh.Dial roep, word 'n aparte verbinding geskep in plaas daarvan om daardie transport te gebruik.
'n Hulpmiddel in 'n toepassing wat reeds x/net/proxy en x/crypto/ssh gebruik, kan die opgestelde SSH-kliënt teruggee:
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
}Die pakketname hier is golang.org/x/net/proxy en golang.org/x/crypto/ssh. proxyAddr wys die SOCKS-luisteraar aan; sshAddr wys die finale bediener as host:port.
Voorsien in config die toepassing se gewone SSH-gebruiker, stawingsmetodes en HostKeyCallback. Die knownhosts-pak kan daardie callback uit 'n vertroude known_hosts-lêer bou. Gee die bestemmingshostnaam aan NewClientConn deur sodat gasheersleutel-passing die beoogde SSH-identiteit gebruik.
Die nil-argument kies geen SOCKS-geloofsbriewe nie. Vir toegelate publieke SSH-bestemmings kan 'n inskrywing sonder rekening uit die SOCKS5-proxylys proxyAddr verskaf as dit die werklike SSH-gasheer en -poort toelaat. Wanneer nodig, gee 'n proxy.Auth met die proxyrekening deur; SSH-stawing bly in config.
NewClient ontvang die inkomende kanaal- en versoekstrome wat NewClientConn teruggee en hanteer daardie kliëntmasjinerie. Sluit die teruggegewe SSH-kliënt wanneer sy werk klaar is. Verbindingshantering in produksie benodig ook 'n begrensde kiesbeleid en handdrukbeleid; hierdie hulpmiddel illustreer net die oordrag van die transport.