
Golang を利用したシンプルな SSH ポート転送: 複雑性を暴く
Go での SSH ポート転送の作成は、当初の想定に反して簡単な作業になる可能性があります。この記事では、プロセスをわかりやすくし、Golang でポート転送を実現する方法を明確に理解することを目的としています。
概念を理解する
SSH ポートを確立するには次に、ローカル ポートとリモート ポート間の接続を作成する必要があります。ローカル ポートからのデータは、SSH 接続を介してリモート ポートに転送されます。これにより、ローカル ポート経由でリモート マシン上で実行されているサービスやアプリケーションに安全にアクセスできるようになります。
シンプルなポート フォワーダーの実装
基本事項を詳しく見てみましょう。ポートフォワーディング。私たちの目標を達成する主要なコード スニペットは次のとおりです。
<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 main() {
// Configure SSH connection
config := &ssh.ClientConfig{
User: username,
Auth: []ssh.AuthMethod{
ssh.Password(password),
},
}
// Listen for local port connections
localListener, err := net.Listen("tcp", localAddrString)
if err != nil {
log.Fatalf("net.Listen failed: %v", err)
}
for {
// Accept local port connections
localConn, err := localListener.Accept()
if err != nil {
log.Fatalf("listen.Accept failed: %v", err)
}
// Create SSH connection and dial remote port
sshClientConn, err := ssh.Dial("tcp", serverAddrString, config)
if err != nil {
log.Fatalf("ssh.Dial failed: %s", err)
}
// Establish remote port connection
sshConn, err := sshClientConn.Dial("tcp", remoteAddrString)
// Copy data between local and remote connections
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)
}
}()
}
}</code>仕組み
キーポイント
この例では、Golang での単純な SSH ポート転送の簡潔でわかりやすい実装を提供します。プロセスの各ステップを理解することで、安全なネットワーク通信のためにポート転送を効果的に利用できます。
以上がGolang を使用して単純な SSH ポート転送を実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。