Go x/crypto/ssh を使用して Bastion ノード経由でプライベート インスタンスへの SSH 接続を確立します
概要:
このガイドでは、プライベート インスタンスへの SSH 接続を確立する方法を説明します。 Go の x/crypto/ssh ライブラリを使用する要塞ノード。
シナリオ:
パブリック サブネットとプライベート サブネットを持つ AWS VPC を考えます。 「要塞」インスタンスはパブリック サブネットにデプロイされ、「サービス インスタンス」はプライベート サブネットで実行されます。
目的:
「サービス インスタンス」に接続します。 " ローカルのラップトップから "要塞" 経由でコマンドを実行し、アップロードしますファイル。
解決策:
1. Bastion 接続の確立:
ssh.Dial 関数を使用して、Bastion ホストに接続します:
bClient, err := ssh.Dial("tcp", bastionAddr, config) if err != nil { log.Fatal(err) }
2.サービス接続のダイヤル:
踏み台クライアントの Dial メソッドを使用して、サービス ホストへの接続を確立します:
conn, err := bClient.Dial("tcp", serviceAddr) if err != nil { log.Fatal(err) }
3.サービス クライアントの作成:
確立された接続を使用して、新しい ssh.ClientConn と ssh.Client を作成します:
ncc, chans, reqs, err := ssh.NewClientConn(conn, serviceAddr, config) if err != nil { log.Fatal(err) } sClient := ssh.NewClient(ncc, chans, reqs)
4.サービス クライアントの使用:
作成された sClient を使用してコマンドを実行し、ファイルを転送できるようになります:
// Run a command on the service instance cmd := sClient.Run("ls -l") output, err := cmd.Output() if err != nil { log.Fatal(err) } fmt.Printf("Output: %s", output) // Upload a file to the service instance f, err := os.Open("./local_file.txt") if err != nil { log.Fatal(err) } defer f.Close() w, err := sClient.NewWriter("service_file.txt") if err != nil { log.Fatal(err) } defer w.Close() if _, err := io.Copy(w, f); err != nil { log.Fatal(err) }
以上がGo の x/crypto/ssh を使用して、Bastion ホスト経由でプライベート インスタンスに SSH 接続する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。