A SOCKS tárcsázó adja a szállítást; az SSH csomag ezen végzi az SSH kézfogást. Egy utána hívott ssh.Dial külön kapcsolatot hozna létre ahelyett, hogy ezt a szállítást használná.

Egy segédfüggvény egy olyan alkalmazásban, amely már használja az x/net/proxy és x/crypto/ssh csomagot, visszaadhatja a beállított SSH klienst:

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
}

A csomagnevek itt golang.org/x/net/proxy és golang.org/x/crypto/ssh. A proxyAddr a SOCKS figyelőt azonosítja; az sshAddr a végső kiszolgálót host:port formában.

Add meg a configban az alkalmazás szokásos SSH-felhasználóját, a hitelesítési módszereket és a HostKeyCallbacket. A knownhosts csomag ezt a callbacket egy megbízható known_hosts fájlból építheti fel. Add át a cél hosztnevét a NewClientConn-nak, hogy a hosztkulcs-egyeztetés a szándékolt SSH-identitást használja.

A nil argumentum nem választ SOCKS-hitelesítő adatot. Engedélyezett nyilvános SSH-célokhoz a SOCKS5 proxy lista fiók nélküli bejegyzése adhat proxyAddr-t, ha engedi a tényleges SSH-hosztot és portot. Ha kell, adj át egy proxy.Auth-ot a proxyfiókkal; az SSH-hitelesítés a configban marad.

A NewClient fogadja a NewClientConn által visszaadott bejövő csatorna- és kérésfolyamokat, és kezeli ezt a kliensmechanizmust. Zárd le a visszakapott SSH klienst, amikor a munkája véget ér. Az éles kapcsolatkezeléshez korlátozott tárcsázás és kézfogási szabály is kell; ez a segédfüggvény csak a szállítás átadását szemlélteti.

Kapcsolódó cikkek