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

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

Linda Hamilton
リリース: 2024-12-05 02:18:10
オリジナル
486 人が閲覧しました

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 までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート