Dialeri SOCKS siguron transportin; paketa SSH kryen dorështrëngimin SSH mbi të. Thirrja e ssh.Dial më pas do të krijonte një lidhje të veçantë në vend që të përdorte atë transport.

Një funksion ndihmës në një aplikacion që tashmë përdor x/net/proxy dhe x/crypto/ssh mund të kthejë klientin SSH të konfiguruar:

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
}

Emrat e paketave këtu janë golang.org/x/net/proxy dhe golang.org/x/crypto/ssh. proxyAddr identifikon dëgjuesin SOCKS; sshAddr identifikon serverin përfundimtar si host:port.

Jepni në config përdoruesin e zakonshëm SSH të aplikacionit, metodat e vërtetimit dhe HostKeyCallback. Paketa knownhosts mund ta ndërtojë atë callback nga një skedar known_hosts i besuar. Kaloni emrin e hostit të destinacionit në NewClientConn që përputhja e çelësit të hostit të përdorë identitetin e synuar SSH.

Argumenti nil nuk zgjedh kredenciale SOCKS. Për destinacione publike SSH të lejuara, një zë pa llogari nga lista e proxy-ve SOCKS5 mund të sigurojë proxyAddr nëse lejon hostin dhe portën reale SSH. Kur kërkohet, kaloni një proxy.Auth me llogarinë e proxy-t; vërtetimi SSH mbetet në config.

NewClient pranon rrjedhat hyrëse të kanaleve dhe kërkesave që kthen NewClientConn dhe trajton atë mekanizëm të klientit. Mbyllni klientin SSH të kthyer kur puna e tij mbaron. Trajtimi i lidhjeve në prodhim kërkon gjithashtu dialing të kufizuar dhe politikë dorështrëngimi; ky funksion ndihmës ilustron vetëm dorëzimin e transportit.

Artikuj të ngjashëm