Passa al client SSH de Go la connexió oberta pel SOCKS
Connecta amb la destinació SSH amb x/net/proxy i després inicialitza x/crypto/ssh sobre el net.Conn resultant.
El dialer SOCKS proporciona el transport; el paquet SSH fa l'apretada de mans SSH al damunt. Cridar ssh.Dial després crearia una connexió separada en lloc d'utilitzar aquest transport.
Una funció auxiliar en una aplicació que ja fa servir x/net/proxy i x/crypto/ssh pot retornar el client SSH configurat:
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
}Els noms dels paquets aquí són golang.org/x/net/proxy i golang.org/x/crypto/ssh. proxyAddr identifica l'oient SOCKS; sshAddr identifica el servidor final com a host:port.
Proporciona a config l'usuari SSH habitual de l'aplicació, els mètodes d'autenticació i HostKeyCallback. El paquet knownhosts pot construir aquest callback a partir d'un fitxer known_hosts de confiança. Passa el nom d'amfitrió de destinació a NewClientConn perquè la comparació de la clau d'amfitrió utilitzi la identitat SSH prevista.
L'argument nil no selecciona cap credencial SOCKS. Per a destinacions SSH públiques permeses, una entrada sense compte de la llista de proxys SOCKS5 pot proporcionar proxyAddr si permet l'amfitrió i el port SSH reals. Quan calgui, passa un proxy.Auth amb el compte del proxy; l'autenticació SSH continua a config.
NewClient rep els fluxos entrants de canals i peticions que retorna NewClientConn i s'encarrega d'aquesta maquinària del client. Tanca el client SSH retornat quan acabi la seva feina. La gestió de connexions en producció també necessita una connexió limitada i una política d'apretada de mans; aquesta funció auxiliar només il·lustra el lliurament del transport.