Dálle ao cliente SSH de Go a conexión que abriu SOCKS
Marca o destino SSH con x/net/proxy e despois inicializa x/crypto/ssh sobre o net.Conn resultante.
O dialer de SOCKS fornece o transporte; o paquete SSH fai o apretón de mans SSH sobre el. Chamar despois a ssh.Dial crearía unha conexión separada en vez de usar ese transporte.
Unha función auxiliar nunha aplicación que xa usa x/net/proxy e x/crypto/ssh pode devolver o cliente SSH configurado:
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
}Os nomes dos paquetes aquí son golang.org/x/net/proxy e golang.org/x/crypto/ssh. proxyAddr identifica o oínte SOCKS; sshAddr identifica o servidor final como host:port.
Fornece en config o usuario SSH habitual da aplicación, os métodos de autenticación e HostKeyCallback. O paquete knownhosts pode construír ese callback a partir dun ficheiro known_hosts de confianza. Pasa o nome de host de destino a NewClientConn para que a comprobación da clave de host use a identidade SSH prevista.
O argumento nil non selecciona credenciais SOCKS. Para destinos SSH públicos permitidos, unha entrada sen conta da lista de proxies SOCKS5 pode fornecer proxyAddr se permite o host e o porto SSH reais. Cando faga falta, pasa un proxy.Auth coa conta do proxy; a autenticación SSH segue en config.
NewClient recibe os fluxos entrantes de canles e peticións que devolve NewClientConn e encárgase desa maquinaria do cliente. Pecha o cliente SSH devolto cando remate o seu traballo. A xestión de conexións en produción tamén precisa marcado limitado e política de apretón de mans; esta función auxiliar só ilustra a entrega do transporte.