Anna Go:n SSH-asiakkaalle SOCKSin avaama yhteys
Yhdistä SSH-kohteeseen x/net/proxyllä ja alusta sitten x/crypto/ssh syntyneeseen net.Conn-yhteyteen.
SOCKS-dialer tarjoaa kuljetuksen; SSH-paketti tekee SSH-kättelyn sen päällä. Myöhemmin tehty ssh.Dial loisikin erillisen yhteyden sen sijaan, että käyttäisi tätä kuljetusta.
Apuohjelma sovelluksessa, joka käyttää jo x/net/proxy- ja x/crypto/ssh-paketteja, voi palauttaa määritetyn SSH-asiakkaan:
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
}Pakettien nimet ovat tässä golang.org/x/net/proxy ja golang.org/x/crypto/ssh. proxyAddr yksilöi SOCKS-kuuntelijan; sshAddr yksilöi lopullisen palvelimen muodossa host:port.
Anna configissa sovelluksen tavallinen SSH-käyttäjä, todennusmenetelmät ja HostKeyCallback. knownhosts-paketti voi rakentaa tämän callbackin luotetusta known_hosts-tiedostosta. Välitä kohdeisäntän nimi NewClientConnille, jotta isäntäavaimen täsmäytys käyttää aiottua SSH-identiteettiä.
nil-argumentti ei valitse SOCKS-tunnuksia. Sallituille julkisille SSH-kohteille SOCKS5-välityspalvelinluettelon merkintä ilman tiliä voi tarjota proxyAddrin, jos se sallii todellisen SSH-isännän ja portin. Tarvittaessa välitä proxy.Auth, joka sisältää välityspalvelimen tilin; SSH-todennus pysyy configissa.
NewClient vastaanottaa NewClientConnin palauttamat saapuvat kanava- ja pyyntövirrat ja hoitaa tämän asiakasmekanismin. Sulje palautettu SSH-asiakas, kun sen työ päättyy. Tuotantoyhteyksien käsittely tarvitsee myös rajatun yhdistämisen ja kättelykäytännön; tämä apuohjelma havainnollistaa vain kuljetuksen siirron.