Golang で単純な SSH ポート転送を作成するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-11-04 10:28:01
オリジナル
799 人が閲覧しました

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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!