Redirection de port SSH simple dans Go
Dans cet article, nous allons nous plonger dans la création et la fermeture d'une redirection de port TCP de base via SSH à l'aide de Go, spécifiquement pour les nouveaux arrivants sur Go et les langages typés statiquement. Nous fournirons une solution claire et concise en décomposant le processus en étapes compréhensibles.
Contexte et objectif
Nous visons à reproduire la fonctionnalité d'une commande de terminal comme "ssh -L 9000:localhost:9999 username@server" par programme à l'aide de Go. Cette commande établit une redirection de port du port local 9000 vers le port distant 9999 sur le serveur spécifié.
Aperçu de la solution
Pour y parvenir, nous allons créer un écouteur local sur le port 9000 et configurez une connexion client SSH avec le serveur distant. Lorsque le port local reçoit une demande, nous établissons une connexion avec le port distant et transmettons les données dans les deux sens.
Répartition du code
<code class="go">package main import ( "io" "log" "net" "golang.org/x/crypto/ssh" ) var ( username = "root" password = "password" serverAddrString = "192.168.1.100:22" localAddrString = "localhost:9000" remoteAddrString = "localhost:9999" ) func forward(localConn net.Conn, config *ssh.ClientConfig) { sshClientConn, err := ssh.Dial("tcp", serverAddrString, config) if err != nil { log.Fatalf("ssh.Dial failed: %s", err) } sshConn, err := sshClientConn.Dial("tcp", remoteAddrString) go func() { _, err = io.Copy(sshConn, localConn) }() go func() { _, err = io.Copy(localConn, sshConn) }() } func main() { config := &ssh.ClientConfig{ User: username, Auth: []ssh.AuthMethod{ ssh.Password(password), }, } localListener, err := net.Listen("tcp", localAddrString) if err != nil { log.Fatalf("net.Listen failed: %v", err) } for { localConn, err := localListener.Accept() if err != nil { log.Fatalf("listen.Accept failed: %v", err) } go forward(localConn, config) } }</code>
Explication
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!