Gje Go SSH-klienten sambandet SOCKS opna
Kople til SSH-målet med x/net/proxy og initialiser deretter x/crypto/ssh på den resulterande net.Conn.
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.