Gitt dem SSH-Client vu Go d'Verbindung, déi SOCKS opgemaach huet
Dial d'SSH-Zil mat x/net/proxy a initialiséier duerno x/crypto/ssh um entstanenen net.Conn.
Den SOCKS-Dialer liwwert den Transport; de SSH-Paket mécht den SSH-Handshake drop. En ssh.Dial duerno géif eng separat Verbindung opbauen, amplaz dësen Transport ze benotzen.
Eng Hëllefsfunktioun an enger Applikatioun, déi schonn x/net/proxy an x/crypto/ssh benotzt, kann de konfiguréierten SSH-Client zréckginn:
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
}D'Paknimm hei sinn golang.org/x/net/proxy an golang.org/x/crypto/ssh. proxyAddr bezeechent den SOCKS-Listener; sshAddr bezeechent de leschte Server als host:port.
Gitt an config de gewéinlechen SSH-Benotzer vun der Applikatioun, d'Authentifizéierungsmethoden an HostKeyCallback. De Pak knownhosts kann dee callback aus enger vertrauenswierdeger known_hosts-Datei bauen. Gitt den Zilhostnumm un NewClientConn, sou datt d'Hostschlëssel-Nofro d'intentéiert SSH-Identitéit benotzt.
D'Argument nil wielt keng SOCKS-Identitéitsdaten. Fir erlaabt ëffentlech SSH-Ziler kann en Aschreiwung ouni Kont aus der SOCKS5-Proxy-Lëscht proxyAddr liwweren, wann se den tatsächlechen SSH-Host an -Port erlaabt. Wann noutwenneg, gitt e proxy.Auth mat dem Proxykont; d'SSH-Authentifizéierung bleift an config.
NewClient iwwerhëlt déi ankommend Kanal- a Ufrostréim, déi NewClientConn zréckgëtt, a geréiert déi Client-Mechanik. Maacht den zréckginnene SSH-Client zou, wann seng Aarbecht fäerdeg ass. D'Verbindungsbehandlung a Produktioun brauch och begrenzt Dialing an eng Handshake-Politik; dës Hëllefsfunktioun illustréiert just d'Iwwergabe vum Transport.