Predajte Go SSH odjemalcu povezavo, ki jo je odprl SOCKS
Povežite se s ciljem SSH z x/net/proxy, nato inicializirajte x/crypto/ssh na dobljenem net.Conn.
Klicatelj SOCKS zagotavlja transport; paket SSH na njem izvede rokovanje SSH. Poznejši klic ssh.Dial bi ustvaril ločeno povezavo, namesto da bi uporabil ta transport.
Pomožna funkcija v aplikaciji, ki že uporablja x/net/proxy in x/crypto/ssh, lahko vrne nastavljenega odjemalca SSH:
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
}Imena paketov sta tukaj golang.org/x/net/proxy in golang.org/x/crypto/ssh. proxyAddr označuje poslušalca SOCKS; sshAddr označuje končni strežnik kot host:port.
V config navedite običajnega uporabnika SSH aplikacije, metode preverjanja pristnosti in HostKeyCallback. Paket knownhosts lahko ta callback zgradi iz zaupanja vredne datoteke known_hosts. Posredujte ime gostitelja cilja v NewClientConn, da primerjanje ključa gostitelja uporabi predvideno identiteto SSH.
Argument nil ne izbere nobenih poverilnic SOCKS. Za dovoljene javne cilje SSH lahko vnos brez računa s seznama posrednikov SOCKS5 zagotovi proxyAddr, če dovoljuje dejanski gostitelj in vrata SSH. Ko je potrebno, posredujte proxy.Auth z računom posrednika; preverjanje pristnosti SSH ostane v config.
NewClient sprejme dohodne tokove kanalov in zahtev, ki jih vrne NewClientConn, ter upravlja to mehaniko odjemalca. Zaprite vrnjenega odjemalca SSH, ko se njegovo delo konča. Ravnanje s povezavami v produkciji potrebuje tudi omejeno vzpostavljanje in politiko rokovanja; ta pomožna funkcija le ponazarja predajo transporta.