>  기사  >  백엔드 개발  >  Golang에서 간단한 SSH 포트 전달을 어떻게 생성합니까?

Golang에서 간단한 SSH 포트 전달을 어떻게 생성합니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-04 10:28:01799검색

How do you create a simple SSH port forward in Golang?

Golang에서 간단한 SSH 포트 전달

이 기사에서는 간단한 SSH 포트 전달을 생성하여 연결하는 방법을 살펴보겠습니다.

포트 전달 생성

포트 전달을 생성하려면 SSH 연결을 설정하고 로컬 포트에서 수신 대기해야 합니다. . 연결이 이루어지면 로컬 포트와 원격 포트 간에 데이터를 전달할 수 있습니다.

다음은 단계별 가이드입니다:

  1. SSH 구성 설정: 필요한 인증 정보(사용자 이름, 비밀번호, 서버 주소)가 포함된 ssh.ClientConfig 개체를 생성합니다.
  2. 로컬 포트에서 수신: 수신을 수신할 net.Listener 개체를 생성합니다. 원하는 로컬 포트에 연결합니다.
  3. 들어오는 연결 수락: 들어오는 로컬 연결을 수락하려면 Listener.Accept() 메서드를 사용합니다.
  4. 원격에 연결합니다. 서버: 제공된 ssh.ClientConfig 개체를 사용하여 원격 서버에 대한 SSH 연결을 설정합니다.
  5. 원격 포트에 연결: 지정된 원격 포트에 대한 연결을 설정합니다. server.
  6. 데이터 전달: io.Copy()를 사용하여 로컬 연결에서 원격 연결로 또는 그 반대로 데이터를 지속적으로 전달합니다.

예제 코드

다음 Go 코드는 이러한 단계를 보여줍니다.

<code class="go">package main

import (
    "io"
    "log"
    "net"
    "golang.org/x/crypto/ssh"
)

func forward(localConn net.Conn, config *ssh.ClientConfig, remoteAddr string) {
    sshClientConn, err := ssh.Dial("tcp", "remote.example.com:22", config)
    if err != nil {
        log.Fatalf("ssh.Dial failed: %s", err)
    }

    sshConn, err := sshClientConn.Dial("tcp", remoteAddr)
    if err != nil {
        log.Fatalf("sshClientConn.Dial failed: %s", err)
    }

    go io.Copy(sshConn, localConn)
    go io.Copy(localConn, sshConn)
}

func main() {
    config := &ssh.ClientConfig{
        User: "username",
        Auth: []ssh.AuthMethod{
            ssh.Password("password"),
        },
    }

    listener, err := net.Listen("tcp", "local.example.com:9000")
    if err != nil {
        log.Fatalf("net.Listen failed: %s", err)
    }

    for {
        localConn, err := listener.Accept()
        if err != nil {
            log.Fatalf("listener.Accept failed: %s", err)
        }

        go forward(localConn, config, "remote.example.com:9999")
    }
}</code>

이 단계를 따르고 제공된 코드를 사용하면 간단하면서도 효과적인 SSH 포트 전달을 생성하고 로컬 컴퓨터에서 원격 서비스에 쉽게 액세스하세요.

위 내용은 Golang에서 간단한 SSH 포트 전달을 어떻게 생성합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.