Lat Go SSH-klientin fá sambandið, sum SOCKS opnaði
Ring til SSH-málíð við x/net/proxy og set síðani x/crypto/ssh í gongd á tí net.Conn, sum kemur út.
SOCKS-dialarin veitir flutningin; SSH-pakkin ger SSH-handtak á honum. At kalla ssh.Dial aftaná hevði gjørt eitt serstakt samband í staðin fyri at brúka henda flutningin.
Ein hjálparfunksjón í eini app, sum longu brúkar x/net/proxy og x/crypto/ssh, kann lata tað uppsetta SSH-klientina aftur:
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
}Pakkanøvnini her eru golang.org/x/net/proxy og golang.org/x/crypto/ssh. proxyAddr vísir á SOCKS-lyttaran; sshAddr vísir á endaliga servaran sum host:port.
Lat vanliga SSH-brúkaran hjá appini, samváttanarhættir og HostKeyCallback í config. Pakkin knownhosts kann byggja tað callback úr eini álítandi known_hosts-fílu. Lat máldátuhostnavnið til NewClientConn, so host-lyklaparingin brúkar tað ætlaða SSH-sjálvsdømið.
nil-argumentið velur ongar SOCKS-innlatingar. Fyri loyvd almenn SSH-mál kann ein postur uttan kontu úr SOCKS5-proxylistanum veita proxyAddr, um hann loyvir veruliga SSH-hostinum og portinum. Tá tað er neyðugt, lat eitt proxy.Auth við proxy-kontuni; SSH-samváttanin verður verandi í config.
NewClient tekur ímóti innkomandi kanal- og spurningstreymunum, sum NewClientConn letur aftur, og stýrir tí klientmekanikkinum. Lat SSH-klientina aftur, tá arbeiðið er liðugt. Sambandshandtering í framleiðslu krevur eisini avmarkaða ringing og handtaksreglu; henda hjálparfunksjónin vísir bert handarin av flutninginum.