SOCKS dialer osigurava transport; SSH paket obavlja SSH rukovanje preko njega. Pozivanje ssh.Dial nakon toga stvorilo bi zasebnu vezu umjesto korištenja tog transporta.

Pomoćna funkcija u aplikaciji koja već koristi x/net/proxy i x/crypto/ssh može vratiti konfigurirani 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 ovdje su golang.org/x/net/proxy i golang.org/x/crypto/ssh. proxyAddr označava SOCKS slušatelja; 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. 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 pružiti proxyAddr ako dopušta stvarni SSH host i port. Kada je potrebno, predajte proxy.Auth s računom proxyja; SSH autentifikacija ostaje u config.

NewClient prima dolazne tokove kanala i zahtjeva koje vraća NewClientConn i upravlja tom klijentskom mehanikom. Zatvorite vraćeni SSH klijent kada njegov posao završi. Rukovanje vezama u produkciji također zahtijeva ograničeno biranje i politiku rukovanja; ova pomoćna funkcija samo ilustrira predaju transporta.

Povezani članci