Add át a Go SSH-kliensének a SOCKS által megnyitott kapcsolatot
Tárcsázd az SSH-célt az x/net/proxyval, majd inicializáld az x/crypto/ssh-t a kapott net.Conn-on.
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.