Le dialer SOCKS fournit le transport ; le paquet SSH effectue la poignée de main SSH par-dessus. Un appel à ssh.Dial ensuite créerait une connexion distincte au lieu d'utiliser ce transport.

Une fonction d'aide dans une application qui utilise déjà x/net/proxy et x/crypto/ssh peut renvoyer le client SSH configuré :

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
}

Les noms de paquets ici sont golang.org/x/net/proxy et golang.org/x/crypto/ssh. proxyAddr désigne l'écouteur SOCKS ; sshAddr désigne le serveur final sous la forme host:port.

Fournissez dans config l'utilisateur SSH habituel de l'application, les méthodes d'authentification et HostKeyCallback. Le paquet knownhosts peut construire ce callback à partir d'un fichier known_hosts de confiance. Passez le nom d'hôte de destination à NewClientConn pour que la correspondance de clé d'hôte utilise l'identité SSH voulue.

L'argument nil ne sélectionne aucun identifiant SOCKS. Pour des destinations SSH publiques autorisées, une entrée sans compte de la liste de proxys SOCKS5 peut fournir proxyAddr si elle autorise l'hôte et le port SSH réels. Au besoin, passez un proxy.Auth contenant le compte du proxy ; l'authentification SSH reste dans config.

NewClient reçoit les flux entrants de canaux et de requêtes renvoyés par NewClientConn et gère cette mécanique du client. Fermez le client SSH renvoyé lorsque son travail se termine. La gestion des connexions en production demande aussi une composition bornée et une politique de poignée de main ; cette fonction d'aide ne fait qu'illustrer la remise du transport.

Articles similaires