문제:
Golang에서 SSH를 통해 프로그래밍 방식으로 기본 TCP 포트 전달 생성 Ruby에 익숙한 사용자입니다.
해결책:
이 문제를 해결하려면 관련된 중요한 단계를 이해하는 것이 중요합니다.
코드:
<code class="go">package main import ( "io" "log" "net" "golang.org/x/crypto/ssh" ) // Configuration parameters for SSH connection 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) { // Establish SSH connection to remote server sshClientConn, err := ssh.Dial("tcp", serverAddrString, config) if err != nil { log.Fatalf("ssh.Dial failed: %s", err) } // Connect to remote port sshConn, err := sshClientConn.Dial("tcp", remoteAddrString) if err != nil { log.Fatalf("sshConn.Dial failed: %s", err) } // Create goroutines for bidirectional data transfer go func() { _, err = io.Copy(sshConn, localConn) if err != nil { log.Fatalf("io.Copy failed: %v", err) } }() go func() { _, err = io.Copy(localConn, sshConn) if err != nil { log.Fatalf("io.Copy failed: %v", err) } }() } func main() { // Configure SSH client config := &ssh.ClientConfig{ User: username, Auth: []ssh.AuthMethod{ ssh.Password(password), }, } // Create local listener localListener, err := net.Listen("tcp", localAddrString) if err != nil { log.Fatalf("net.Listen failed: %v", err) } // Monitor listener for new connections for { localConn, err := localListener.Accept() if err != nil { log.Fatalf("localListener.Accept failed: %v", err) } go forward(localConn, config) } }</code>
위 내용은 Golang을 사용하여 간단한 SSH 포트 전달을 만드는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!