NLB 経由で手元の Windows 11 からプライベートサブネットの EC2(RHEL9)に TeraTerm での SSH 接続とファイル転送を試してみた

NLB 経由で手元の Windows 11 からプライベートサブネットの EC2(RHEL9)に TeraTerm での SSH 接続とファイル転送を試してみた

NLB 経由で、手元の Windows 11 からプライベートサブネットの EC2(RHEL9)に TeraTerm での SSH 接続とファイル転送を試してみました。NLB はスティッキーセッション未サポート、350 秒以上無活動の接続を自動的に切断するという仕様があるため、システム要件を加味し慎重に選定してください。
Clock Icon2023.11.05 08:36

コーヒーが好きな emi です。

今回は NLB 経由で、手元の Windows 11 からプライベートサブネットの EC2(RHEL9)に TeraTerm での SSH 接続とファイル転送を試してみました。

はじめに

プライベートサブネットの EC2(RHEL9)にオンプレミスサーバーや手元の開発端末からファイルを共有したいケースがあります。
よく考えられるのは「踏み台サーバー経由でファイル共有する」「Transfer family で S3 バケットにデータを配置し、S3 バケット経由でファイル共有する」などのパターンです。

しかし、今回は「EC2 インスタンスを AWS Auto Scaling でスケーリングせず、1 台のみ」、「データを EC2 内部に保持している」、「ファイル共有したい周辺サーバーや開発端末が多く、SSM ポートフォワードや EC2 Instance Connect エンドポイントだと周辺サーバーや開発端末の設定が大変」等の前提があったため、NLB 経由で TeraTerm での SSH 接続とファイル転送を試してみました。

NLB を選定する際の注意点などは以下のブログにまとめていますので、参照ください。

Systems Manager セッションマネージャーを使いたい場合は以下のブログをご参照ください。

検証:TeraTerm での SSH 接続とファイル送受信

今回の検証構成図

以下のような構成で検証します。NLB のターゲットグループには EC2(RHEL9)が 1 台だけ含まれるようにします。
手元の Windows 11 端末には TeraTerm をインストールしておき、VPC と EC2 はあらかじめ作成しておいてください。

以降の手順は基本的に以下のブログと同様に設定します。
キーペアの部分のみ注意が必要ですので、後述します。

NLB のターゲットグループの作成

以下を参照のうえ実施ください。

NLB の作成

以下を参照のうえ実施ください。

EC2 インスタンスのセキュリティグループの編集

以下を参照のうえ実施ください。

ターゲットグループのヘルスステータス確認

以下を参照のうえ実施ください。

キーペアの作成

RHEL 9.0 では SHA-1 が非推奨になったことにより、キーペアのタイプが「RSA」だと鍵認証に失敗します。
本検証ではキーペアのタイプは「ED25519」を選択してください。

EC2 のコンソール画面で [キーペア] - [キーペアを作成] をクリックします。

  • 名前:任意の名前(今回は「sftp-test-tokyo4」としています)
  • キーペアのタイプ:ED25519
  • プライベートキーファイル形式:.pem

設定したら、「キーペアを作成」をクリックします。

秘密鍵(今回は「sftp-test-tokyo4.pem」)がダウンロードされます。このタイミングでしかキーペアはダウンロードできないので、大事に保管してください。

キーペアの公開鍵の文字列を取得

キーペアの公開鍵を取得します。
PuTTy などの 3rd Party 製品を使う方法もありますが、AWS CLI で公開鍵を表示できるので、CloudShell で公開鍵の文字列を取得しましょう。
以下のドキュメントで、AWS CLI を利用して公開鍵の文字列を取得するコマンドを確認します。

パブリックキーの説明

公開鍵の文字列を取得するコマンド構文

aws ec2 describe-key-pairs --key-names key-pair-name --include-public-key

key-pair-name にはキーペアの名前をいれます。今回キーペアの名前は「sftp-test-tokyo4」としましたので、実行コマンドは以下になります。

aws ec2 describe-key-pairs --key-names sftp-test-tokyo4 --include-public-key

CloudShell を開き、コマンドを実行します。

  • 実行結果
    [cloudshell-user@ip-10-6-34-245 ~]$ aws ec2 describe-key-pairs --key-names sftp-test-tokyo4 --include-public-key
    {
        "KeyPairs": [
            {
                "KeyPairId": "key-0789c1188293c8c61",
                "KeyFingerprint": "xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx",
                "KeyName": "sftp-test-tokyo4",
                "KeyType": "ed25519",
                "Tags": [],
                "PublicKey": "ssh-ed25519 AAAAxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxlh39 sftp-test-tokyo4",
                "CreateTime": "2023-11-02T18:33:50.546000+00:00"
            }
        ]
    }
    [cloudshell-user@ip-10-6-34-245 ~]$ 
    

"PublicKey" の後ろが公開鍵の文字列です。ssh-ed25519 AAAAxxx~xxxlh39 sftp-test-tokyo4 の部分をコピーしておいてください。

セッションマネージャーで EC2(RHEL9)に接続し、公開鍵の文字列を登録

セッションマネージャーで EC2(RHEL9)に接続し、公開鍵の文字列を登録します。
セッションマネージャーで EC2(RHEL9)に接続してください。

ec2-user に切り替えます。

実行コマンド

sudo su - ec2-user
  • 実行結果例
    sh-5.1$ sudo su - ec2-user
    Last login: Sun Nov  5 07:45:27 UTC 2023 from 104.28.238.35 on pts/0
    [ec2-user@ip-10-1-10-94 ~]$
    

ls -la コマンドで、ec2-user のホームディレクトリに .ssh があるか確認します。

  • 実行結果例
    [ec2-user@ip-10-1-10-94 ~]$ ls -la
    total 28
    drwx------. 3 ec2-user ec2-user 4096 Nov  2 19:04 .
    drwxr-xr-x. 4 root     root       38 Oct 31 02:21 ..
    -rw-r--r--. 1 ec2-user ec2-user    0 Nov  2 15:57 20231103_test.txt
    -rw-------. 1 ec2-user ec2-user  875 Nov  2 18:45 .bash_history
    -rw-r--r--. 1 ec2-user ec2-user   18 Nov 24  2022 .bash_logout
    -rw-r--r--. 1 ec2-user ec2-user  141 Nov 24  2022 .bash_profile
    -rw-r--r--. 1 ec2-user ec2-user  492 Nov 24  2022 .bashrc
    -rw-------. 1 ec2-user ec2-user   20 Nov  2 18:49 .lesshst
    drwx------. 2 ec2-user ec2-user   76 Nov  2 18:57 .ssh
    -rw-r--r--. 1 ec2-user ec2-user   30 Oct 31 02:42 test_EC2_file.txt
    -rw-r--r--. 1 ec2-user ec2-user    0 Aug 12 13:32 test.txt
    [ec2-user@ip-10-1-10-94 ~]$
    

.ssh がありました。
続いて ls -la .ssh/ コマンドで、authorized_keys ファイルがあるか確認します。

  • 実行結果例
    [ec2-user@ip-10-1-10-94 ~]$ ls -la .ssh/
    total 24
    drwx------. 2 ec2-user ec2-user    76 Nov  2 18:57 .
    drwx------. 3 ec2-user ec2-user  4096 Nov  5 07:15 ..
    -rw-------. 1 ec2-user ec2-user   496 Nov  2 18:54 authorized_keys
    -rw-------. 1 ec2-user ec2-user 12288 Nov  2 17:49 .authorized_keys.swp
    -rw-r--r--. 1 ec2-user ec2-user   127 Nov  2 18:57 known_hosts
    [ec2-user@ip-10-1-10-94 ~]$
    

authorized_keys ファイルがありました。
vi .ssh/authorized_keys で編集します。

  • 実行結果
    [ec2-user@ip-10-1-10-94 ~]$ vi .ssh/authorized_keys
    

vi コマンドを実行すると vi エディタが開きます。i キーを押下して編集モードに遷移します。
先ほどコピーしておいた公開鍵の文字列を貼り付けます。

既に登録済みの別の公開鍵の文字列が存在しますが、改行して、上記画像のように続けて貼り付けて OK です。

esc キーを押下して編集モードを抜けたら、:wqを入力し Enter キーを押下して保存します。
authorized_keys ファイルの中身が正しく編集できたか cat コマンドで確認します。

実行コマンド

cat .ssh/authorized_keys
  • 実行結果
    [ec2-user@ip-10-1-10-94 ~]$ cat .ssh/authorized_keys
    ssh-rsa AAAAxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxSZV7 sftp-test-tokyo
    
    ssh-ed25519 AAAAxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxlh39 sftp-test-tokyo4
    [ec2-user@ip-10-1-10-94 ~]$
    

authorized_keys ファイルに公開鍵の文字列が保存できたことが確認できました。
これで EC2 インスタンスにキーペアの公開鍵の文字列を登録できました。

もし authorized_keys ファイルの編集権限がない場合は chmod 600 .ssh/authorized_keys などで書き込み権限を付与してください。

TeraTerm による SSH 接続

TeraTerm を開きます。

  • ホスト:コピーしておいた NLB の DNS 名、または NLB に付与した Elastic IP アドレス
  • TCP ポート:22
  • サービス:SSH

入力できたら「OK」をクリックします。

  • ユーザー名:ec2-user(キーペアを登録したユーザー)
  • 「RSA/DSA/ECDSA/ED25519鍵を使う」にチェック
  • 秘密鍵:キーペアを保存している手元の Windows 11 端末のパスを入力

入力できたら「OK」をクリックします。

EC2 インスタンスに NLB 経由で SSH 接続できました。

TTHHS: Secure File Copy によるファイル送受信

[ファイル] - [SSH SCP] をクリックします。

「TTSSH: Secure File Copy」画面が開きます。
まずは手元の Windows 11 端末から EC2(RHEL9)のファイルを送ります。
上部の From に送りたいファイルのパスを入力し、「send」をクリックします。

EC2 上 ec2-user のホームディレクトリで ls -la コマンドでを実行しファイルを確認すると、send したファイルが存在することが分かります。

[ec2-user@ip-10-1-10-94 ~]$ ls -la
total 28
drwx------. 3 ec2-user ec2-user 4096 Nov  2 19:04 .
drwxr-xr-x. 4 root     root       38 Oct 31 02:21 ..
-rw-r--r--. 1 ec2-user ec2-user    0 Nov  2 15:57 20231103_02_test.txt
-rw-r--r--. 1 ec2-user ec2-user    0 Nov  2 15:57 20231103_test.txt
-rw-------. 1 ec2-user ec2-user  875 Nov  2 18:45 .bash_history
-rw-r--r--. 1 ec2-user ec2-user   18 Nov 24  2022 .bash_logout
-rw-r--r--. 1 ec2-user ec2-user  141 Nov 24  2022 .bash_profile
-rw-r--r--. 1 ec2-user ec2-user  492 Nov 24  2022 .bashrc
-rw-------. 1 ec2-user ec2-user   20 Nov  2 18:49 .lesshst
drwx------. 2 ec2-user ec2-user   76 Nov  2 18:57 .ssh
-rw-r--r--. 1 ec2-user ec2-user   30 Oct 31 02:42 test_EC2_file.txt
-rw-r--r--. 1 ec2-user ec2-user    0 Aug 12 13:32 test.txt
[ec2-user@ip-10-1-10-94 ~]$

次は EC2 上のファイルを手元の端末にコピーします。
EC2 上でテストファイルを作成します。

touch 20231103_02_test_EC2_file.txt

ファイルが作成できたか確認します。

ls -la | grep 20231103_02_test_EC2_file.txt
  • 実行結果例
    [ec2-user@ip-10-1-10-94 ~]$ touch 20231103_02_test_EC2_file.txt
    [ec2-user@ip-10-1-10-94 ~]$ ls -la | grep 20231103_02_test_EC2_file.txt
    -rw-r--r--. 1 ec2-user ec2-user    0 Nov  2 19:05 20231103_02_test_EC2_file.txt
    [ec2-user@ip-10-1-10-94 ~]$
    

では手元の端末にコピーします。
以下の画像のように、下部の From に送りたいファイルパスを入力します。
To にはファイルをコピーしたい手元の端末のパスを入力し、「Receive」をクリックします。

手元の端末にファイルがコピーされました。

終わりに

今回は「EC2 インスタンスを AWS Auto Scaling でスケーリングせず、1 台のみ」、「データを EC2 内部に保持している」等の前提があったため NLB 経由での SCP ファイル送受信を試してみました。 どなたかの参考になれば幸いです。

参考

この記事をシェアする

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.