Gefðu SSH-biðlara Go sambandið sem SOCKS opnaði
Hringdu í SSH-áfangastaðinn með x/net/proxy og frumstilltu síðan x/crypto/ssh á net.Conn sem verður til.
SOCKS-hringirinn sér um flutninginn; SSH-pakkinn framkvæmir SSH-handtakið yfir hann. Kall á ssh.Dial eftir á myndi búa til sér samband í stað þess að nota þennan flutning.
Hjálparfall í forriti sem notar þegar x/net/proxy og x/crypto/ssh getur skilað uppsetta SSH-biðlaranum:
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öfnin hér eru golang.org/x/net/proxy og golang.org/x/crypto/ssh. proxyAddr tilgreinir SOCKS-hlustarann; sshAddr tilgreinir lokaveitinn sem host:port.
Gefðu upp í config venjulegan SSH-notanda forritsins, auðkenningaraðferðir og HostKeyCallback. knownhosts-pakkinn getur byggt það callback úr traustri known_hosts-skrá. Sendu vélarheiti áfangastaðarins í NewClientConn svo vélarlyklapörun noti fyrirhugaða SSH-auðkennina.
nil-viðfangið velur engin SOCKS-auðkenni. Fyrir leyfða opinbera SSH-áfangastaði getur færsla án reiknings úr SOCKS5-milliliðalistanum veitt proxyAddr ef hún leyfir raunverulega SSH-vélina og portið. Þegar þarf, sendu proxy.Auth með milliliðareikningnum; SSH-auðkenningin verður áfram í config.
NewClient tekur við innkomandi rásar- og beiðnistraumum sem NewClientConn skilar og annast þá biðlaravél. Lokaðu skilaða SSH-biðlaranum þegar vinnu hans lýkur. Sambandameðferð í framleiðslu þarf einnig afmarkaða hringingu og handtakastefnu; þetta hjálparfall sýnir aðeins afhendingu flutningsins.