Predajte Go SSH klijentu vezu koju je otvorio SOCKS
Povežite se na SSH odredište s x/net/proxy, zatim pokrenite x/crypto/ssh na dobivenom net.Conn.
SOCKS dialer osigurava prijenos; SSH paket obavlja SSH rukovanje preko njega. Poziv ssh.Dial nakon toga stvorio bi zasebnu vezu umjesto korištenja tog prijenosa.
Pomoćna funkcija u aplikaciji koja već koristi x/net/proxy i x/crypto/ssh može vratiti konfiguriranog SSH klijenta:
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 ovdje su golang.org/x/net/proxy i golang.org/x/crypto/ssh. proxyAddr označava SOCKS slušatelja; sshAddr označava konačni poslužitelj kao host:port.
U config predajte uobičajenog SSH korisnika aplikacije, metode autentikacije i HostKeyCallback. Paket knownhosts može izgraditi taj callback iz pouzdane datoteke known_hosts. Proslijedite naziv hosta odredišta u NewClientConn kako bi podudaranje ključa hosta koristilo namjeravani SSH identitet.
Argument nil ne odabire nikakve SOCKS vjerodajnice. Za dopuštena javna SSH odredišta unos bez računa s popisa SOCKS5 proxyja može dati proxyAddr ako dopušta stvarni SSH host i port. Kada je potrebno, predajte proxy.Auth s računom proxyja; SSH autentikacija ostaje u config.
NewClient preuzima dolazne tokove kanala i zahtjeva koje vraća NewClientConn i upravlja tom klijentskom mehanikom. Zatvorite vraćenog SSH klijenta kad njegov posao završi. Rukovanje vezama u produkciji također traži ograničeno biranje i politiku rukovanja; ova pomoćna funkcija samo prikazuje predaju prijenosa.