Perduokite Go SSH klientui SOCKS atidarytą ryšį
Prisijunkite prie SSH paskirties su x/net/proxy, tada inicijuokite x/crypto/ssh gautame net.Conn.
SOCKS dialeris tiekia transportą; SSH paketas per jį atlieka SSH rankos paspaudimą. Vėlesnis ssh.Dial kvietimas sukurtų atskirą ryšį, o ne naudotų tą transportą.
Pagalbinė funkcija programoje, kuri jau naudoja x/net/proxy ir x/crypto/ssh, gali grąžinti sukonfigūruotą SSH klientą:
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
}Paketų pavadinimai čia yra golang.org/x/net/proxy ir golang.org/x/crypto/ssh. proxyAddr nurodo SOCKS klausytoją; sshAddr nurodo galutinį serverį kaip host:port.
config faile pateikite įprastą programos SSH naudotoją, autentifikavimo metodus ir HostKeyCallback. Paketas knownhosts gali sudaryti tą callback iš patikimo known_hosts failo. Perduokite paskirties hosto vardą į NewClientConn, kad hosto rakto sutapatinimas naudotų numatytą SSH tapatybę.
Argumentas nil nepasirenka jokių SOCKS prisijungimo duomenų. Leidžiamoms viešoms SSH paskirtims SOCKS5 proxy sąrašo įrašas be paskyros gali suteikti proxyAddr, jei leidžia tikrąjį SSH hostą ir prievadą. Prireikus perduokite proxy.Auth su proxy paskyra; SSH autentifikavimas lieka config.
NewClient priima NewClientConn grąžintus įeinančius kanalų ir užklausų srautus ir tvarko tą kliento mechanizmą. Uždarykite grąžintą SSH klientą, kai jo darbas baigiasi. Ryšių tvarkymui produkcijoje taip pat reikia apriboto prisijungimo ir rankos paspaudimo politikos; ši pagalbinė funkcija tik iliustruoja transporto perdavimą.