ホームページ >バックエンド開発 >Golang >x/crypto/ssh を使用して Go の Bastion ホスト経由でプライベート インスタンスに SSH 接続する方法は?

x/crypto/ssh を使用して Go の Bastion ホスト経由でプライベート インスタンスに SSH 接続する方法は?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-06 16:42:22306ブラウズ

How to SSH into a Private Instance via a Bastion Host in Go using x/crypto/ssh?

x/crypto/ssh を使用して Go の要塞ノード経由でプライベート インスタンスへの SSH 接続を確立する

このシナリオでは、接続することを目的としています。 AWS VPC 内にデプロイされた踏み台ノードを介して、ローカルのラップトップからプライベート インスタンス (「サービス インスタンス」と呼ばれる) に接続します。パブリックサブネットとプライベートサブネット。サービス インスタンスでコマンドを実行し、ローカル ラップトップからファイルを転送する予定です。

Go の "x/crypto/ssh" ライブラリを使用してこれを実現するには:

  1. 要塞ホストへの接続を確立:

    • Bastion ホストへの接続を表す ssh.Client。
  2. Bastion からサービス インスタンスへの接続を確立:

    • 使用ユーザーとサービスの間に仮想 net.Conn を確立するための要塞クライアントの Dial メソッド
  3. サービス インスタンスの新しい SSH クライアントの作成:

    • net.Conn を ssh.Conn に変換します。 using ssh.NewClientConn.
    • 新規作成サービス インスタンスと通信するための ssh.Client (sClient)。
  4. コマンドの実行とファイルの転送:

    • を使用しますサービス上でコマンドを実行するための sClient
    • ファイル転送メカニズム (SFTP など) を実装して、ローカル ラップトップからサービス インスタンスにファイルをアップロードします。

以下は、コード スニペットを示しています。これらの手順:

// connect to the bastion host
bClient, err := ssh.Dial("tcp", bastionAddr, config)
if err != nil {
    log.Fatal(err)
}

// Dial a connection to the service host, from the bastion
conn, err := bClient.Dial("tcp", serviceAddr)
if err != nil {
    log.Fatal(err)
}

ncc, chans, reqs, err := ssh.NewClientConn(conn, serviceAddr, config)
if err != nil {
    log.Fatal(err)
}

sClient := ssh.NewClient(ncc, chans, reqs)

sClient を使用すると、コマンドを実行し、ファイルを相互に転送できます。サービス インスタンス。

以上がx/crypto/ssh を使用して Go の Bastion ホスト経由でプライベート インスタンスに SSH 接続する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。