Predajte Go SSH klijentu vezu koju je otvorio SOCKS
Povežite se na SSH odredište pomoću x/net/proxy, zatim inicijalizujte x/crypto/ssh na dobijenom net.Conn.
SOCKS dialer obezbeđuje transport; SSH paket obavlja SSH rukovanje preko njega. Poziv ssh.Dial nakon toga napravio bi zasebnu vezu umesto korišćenja tog transporta.
Pomoćna funkcija u aplikaciji koja već koristi x/net/proxy i x/crypto/ssh može vratiti konfigurisani SSH klijent:
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
}Nazivi paketa ovde su golang.org/x/net/proxy i golang.org/x/crypto/ssh. proxyAddr označava SOCKS slušaoca; sshAddr označava konačni server kao host:port.
U config predajte uobičajenog SSH korisnika aplikacije, metode autentifikacije i HostKeyCallback. Paket knownhosts može izgraditi taj callback iz pouzdane datoteke known_hosts. Prosledite naziv hosta odredišta u NewClientConn da bi podudaranje ključa hosta koristilo nameravani SSH identitet.
Argument nil ne bira nikakve SOCKS akreditive. Za dozvoljena javna SSH odredišta, unos bez naloga sa liste SOCKS5 proksija može dati proxyAddr ako dozvoljava stvarni SSH host i port. Kada je potrebno, prosledite proxy.Auth sa nalogom proksija; SSH autentifikacija ostaje u config.
NewClient prima dolazne tokove kanala i zahteva koje vraća NewClientConn i upravlja tom klijentskom mehanikom. Zatvorite vraćeni SSH klijent kada njegov posao završi. Rukovanje vezama u produkciji takođe zahteva ograničeno biranje i politiku rukovanja; ova pomoćna funkcija samo ilustruje predaju transporta.