Anna Go SSH-kliendile SOCKS-i avatud ühendus
Ühendu SSH-sihtkohaga x/net/proxy abil ja seejärel käivita x/crypto/ssh saadud net.Conn peal.
SOCKS-dialer annab transpordi; SSH-pakett teeb selle peal SSH-kätluse. Hilisem ssh.Dial kutse looks eraldi ühenduse, selle asemel et seda transporti kasutada.
Abifunktsioon rakenduses, mis juba kasutab x/net/proxy ja x/crypto/ssh, saab tagastada seadistatud SSH-kliendi:
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
}Pakettide nimed on siin golang.org/x/net/proxy ja golang.org/x/crypto/ssh. proxyAddr määrab SOCKS-kuulaja; sshAddr määrab lõppserveri kujul host:port.
Anna config-is rakenduse tavaline SSH-kasutaja, autentimismeetodid ja HostKeyCallback. Pakett knownhosts saab selle callbacki usaldusväärsest known_hosts-failist ehitada. Edasta sihtkoha hostinimi NewClientConn-ile, et hostivõtme võrdlus kasutaks kavandatud SSH-identiteeti.
Argument nil ei vali ühtegi SOCKS-i mandaati. Lubatud avalike SSH-sihtkohtade jaoks võib kontota kirje SOCKS5-puhverserverite loendist anda proxyAddr, kui see lubab tegelikku SSH-hosti ja -porti. Vajadusel edasta proxy.Auth koos puhverserveri kontoga; SSH-autentimine jääb config-i.
NewClient võtab vastu NewClientConn-i tagastatud sissetulevad kanali- ja päringuvood ning haldab seda kliendimehhanismi. Sulge tagastatud SSH-klient, kui selle töö lõpeb. Tootmiskeskkonnas vajab ühenduste käsitlemine ka piiratud ühenduse loomist ja kätluspoliitikat; see abifunktsioon näitab ainult transpordi üleandmist.