Jou Go syn SSH-klant de ferbining dy't SOCKS iepene hat
Dial it SSH-doel mei x/net/proxy en initialisearje dêrnei x/crypto/ssh op de ûntstiene net.Conn.
De SOCKS-dialer leveret it transport; it SSH-pakket docht de SSH-hânskuteling deroer. In oprop nei ssh.Dial soe dêrnei in aparte ferbining meitsje ynstee fan dat transport te brûken.
In helpfunksje yn in applikaasje dy't al x/net/proxy en x/crypto/ssh brûkt, kin de konfigurearre SSH-klant weromjaan:
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
}De pakketnammen hjir binne golang.org/x/net/proxy en golang.org/x/crypto/ssh. proxyAddr wiist de SOCKS-harker oan; sshAddr wiist de úteinlike server oan as host:port.
Jou yn config de gewoane SSH-brûker fan 'e applikaasje, de autentikaasjemetoaden en HostKeyCallback. It pakket knownhosts kin dy callback bouwe út in fertroud known_hosts-bestân. Jou de hostnamme fan it doel oan NewClientConn, sadat it ferlykjen fan 'e hostkaai de bedoelde SSH-identiteit brûkt.
It nil-argumint kiest gjin SOCKS-gegevens. Foar tastiene iepenbiere SSH-doelen kin in yngong sûnder akkount út 'e SOCKS5-proksylist proxyAddr leverje as dy de echte SSH-host en -poarte tastiet. As it nedich is, jou dan in proxy.Auth mei it proksyakkoart; SSH-autentikaasje bliuwt yn config.
NewClient ûntfangt de ynkommende kanaal- en oanfraachstreamen dy't NewClientConn weromjout en beheart dy klantmasjinerie. Slút de weromjûne SSH-klant as syn wurk dien is. Ferbiningsôfhanneling yn produksje freget ek beheind dialbelied en hânskutelingsbelied; dizze helpfunksje yllustrearret allinnich it oerjaan fan it transport.