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

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

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-05 02:18:10474ブラウズ

How to SSH into a Private Instance via a Bastion Host Using Go's x/crypto/ssh?

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

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