Donu al la SSH-kliento de Go la konekton malfermitan de SOCKS
Alklopodu la SSH-celon per x/net/proxy, poste pravalorigu x/crypto/ssh sur la rezulta net.Conn.
La SOCKS-klopodilo liveras la transporton; la SSH-paketo faras la SSH-manpremon super ĝi. Posta voko al ssh.Dial kreas apartan konekton anstataŭ uzi tiun transporton.
Helpa funkcio en aplikaĵo, kiu jam uzas x/net/proxy kaj x/crypto/ssh, povas redoni la agordan SSH-klienton:
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
}La pakaĵnomoj ĉi tie estas golang.org/x/net/proxy kaj golang.org/x/crypto/ssh. proxyAddr identigas la SOCKS-aŭskultanton; sshAddr identigas la finan servilon kiel host:port.
Provizu en config la kutiman SSH-uzanton de la aplikaĵo, la aŭtentikigajn metodojn kaj HostKeyCallback. La pakaĵo knownhosts povas konstrui tiun callback el fidinda dosiero known_hosts. Transdonu la celan gastigantnomon al NewClientConn por ke la kongruigo de la gastiganta ŝlosilo uzu la celitan SSH-identecon.
La argumento nil elektas neniujn SOCKS-akreditilojn. Por permesitaj publikaj SSH-celoj, enskribo sen konto el la listo de SOCKS5-prokuradoj povas provizi proxyAddr se ĝi permesas la realan SSH-gastiganton kaj pordon. Kiam necese, transdonu proxy.Auth kun la prokura konto; SSH-aŭtentikigo restas en config.
NewClient ricevas la envenantajn kanalajn kaj petajn fluojn redonitajn de NewClientConn kaj administras tiun klientan mekanismon. Fermu la redonitan SSH-klienton kiam ĝia laboro finiĝas. Produkta konekta traktado bezonas ankaŭ limigitan klopodon kaj manpreman politikon; ĉi tiu helpa funkcio nur ilustras la transdonon de la transporto.