Systems Manager セッションマネージャーを使って Windows 11 からプライベートサブネットの EC2(RHEL9)に WinSCP でファイル送信してみた

2023.10.31

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

Systems Manager セッションマネージャーを使って Windows 11 からプライベートサブネットの EC2(RHEL9)に WinSCP でファイル送信・ダウンロードする検証をおこないました。
手順を共有します。

構成図

以下のような構成で、手元の Windows 11 端末からは Systems Manager セッションマネージャーでプライベートサブネットの EC2 インスタンス(RHEL9)には接続できる状態から始めます。
RedHat Enterprise Linux の AMI にはデフォルトで SSM Agent がインストールされていないため、別途インストールする必要があることに注意してください。詳細は以下ブログもご参照ください。

手元の Windows 11 には以下の準備をおこないます。

  • AWS CLI のインストール
  • IAM ユーザーのクレデンシャルをプロファイルとして設定
  • AWS CLI 用の Session Manager プラグインをインストール
  • WinSCP をインストール

キーペアを作成し、EC2 インスタンス(今回は RHEL9)に公開鍵の文字列を登録します。

それでは設定していきましょう。

AWS CLI インストール

手元の Windows 11 端末に AWS CLI をインストールし、IAM ユーザーのクレデンシャルをプロファイルとして設定します。
以下のブログに詳細を記載しましたので、実施ください。

AWS CLI 用の Session Manager プラグインをインストールする

以下のドキュメントを参考に、手元の Windows 11 端末に Session Manager プラグインをインストールします。

次の URL をクリックすると、すぐにインストーラーがダウンロードされます。

https://s3.amazonaws.com/session-manager-downloads/plugin/latest/windows/SessionManagerPluginSetup.exe

ダウンロードした「SessionManagerPluginSetup.exe」をダブルクリックするとインストールウィザードが始まります。

「agree to the license terms and conditions」にチェックして「Install」をクリックします。

インストールできたら「close」をクリックしてウィザードを閉じます。

WinSCP のインストール

以下の WinSCP 公式ドキュメントを参考に、手元の Windows 11 端末に WinSCP をインストールします。

以下の WinSCP のダウンロードページからインストーラーをダウンロードします。
https://winscp.net/eng/download.php

ダウンロードした「WinSCP-6.1.2-Setup.exe」をダブルクリックするとインストールウィザードが始まります。
インストールモードは「すべてのユーザー用にインストール」を選択しました。

使用許諾契約書の同意で「許諾」をクリックして進みます。

セットアップ形式では「標準的なインストール」をチェックして「次へ」をクリックします。

ユーザの初期設定では「エクスプローラー」を選択してみました。
Installation を見ると、「Total Commander、Altap Salamander、Norton Commander などのファイルマネージャーを使用したことがある場合はデフォルトのコマンダーインターフェイスを選ぶといいですよ、それ以外の場合はエクスプローラーインターフェイスの方が馴染みがありますよ(意訳)」と記載されていたためです。

Then you will be prompted for Initial User Settings. This allows you to select user interface style. If you have used (and enjoyed) file managers like Total Commander, Altap Salamander or Norton Commander before, keep default Commander interface. Otherwise you will probably be more familiar with Explorer interface.

「インストール」をクリックします。

インストールが完了したら「完了」をクリックしてウィザードを閉じます。

キーペアの作成と設定

キーペアを作成せずに EC2(RHEL9)を起動したので、キーペアを作成して EC2 に設定します。

キーペアの作成

AWS マネジメントコンソールで EC2 コンソールに遷移し、ナビゲーションペインで「キーペア」を選択して「キーペアの作成」からキーペアを作成します。

以下の項目を設定してください。

  • 名前
    • 任意の名前。今回は「sftp-test-tokyo」としました。
  • キーペアのタイプ
    • デフォルトのまま RSA で OK です。
  • プライベートキーファイル形式
    • WinSCP は .ppk 形式のキーペアが必要なので、.ppk を選択してください。

最後に「キーペアを作成」をクリックしてキーペアを作成します。

キーペアがダウンロードされます。このタイミングでしかキーペアはダウンロードできないので、大事に保管してください。

なお、RHEL 9.0 では SHA-1 が非推奨になったことにより、キーペアのタイプが「RSA」だと鍵認証に失敗することがある模様です。
本検証ではキーペアのタイプ「RSA」ででうまく行きましたが、うまくいかない場合はキーペアのタイプを「ED25519」にして試してみてください。

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

キーペアの公開鍵を取得します。
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-tokyo」としましたので、実行コマンドは以下になります。

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

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

  • 実行結果
    [cloudshell-user@ip-10-2-15-4 ~]$ aws ec2 describe-key-pairs --key-names sftp-test-tokyo --include-public-key
    {
        "KeyPairs": [
            {
                "KeyPairId": "key-0452d5ed13437cd64",
                "KeyFingerprint": "xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx",
                "KeyName": "sftp-test-tokyo",
                "KeyType": "rsa",
                "Tags": [],
                "PublicKey": "ssh-rsa AAAAxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxSZV7 sftp-test-tokyo",
                "CreateTime": "2023-10-31T02:01:28.788000+00:00"
            }
        ]
    }
    [cloudshell-user@ip-10-2-15-4 ~]$

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

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

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

ec2-user に切り替えます。

実行コマンド

sudo su - ec2-user
  • 実行結果
    sh-5.1$ sudo su - ec2-user
    [ec2-user@ip-10-1-10-94 ~]$

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

  • 実行結果
    [ec2-user@ip-10-1-10-94 ~]$ ls -la
    total 12
    drwx------. 3 ec2-user ec2-user  74 Oct 31 00:36 .
    drwxr-xr-x. 4 root     root      38 Oct 31 02:21 ..
    -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
    drwx------. 2 ec2-user ec2-user  29 Oct 31 00:36 .ssh
    [ec2-user@ip-10-1-10-94 ~]$

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

  • 実行結果
    [ec2-user@ip-10-1-10-94 ~]$ ls -la .ssh/
    total 0
    drwx------. 2 ec2-user ec2-user 29 Oct 31 00:36 .
    drwx------. 3 ec2-user ec2-user 74 Oct 31 00:36 ..
    -rw-------. 1 ec2-user ec2-user  0 Oct 31 00:36 authorized_keys
    [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 キーを押下して編集モードに遷移します。
先ほどコピーしておいた公開鍵の文字列を貼り付けます。

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
    [ec2-user@ip-10-1-10-94 ~]$

authorized_keys ファイルに公開鍵の文字列が保存できたことが確認できました。
これで EC2 インスタンスにキーペアの公開鍵の文字列を登録できました。
もし authorized_keys ファイルの編集権限がない場合は chmod 600 .ssh/authorized_keys などで書き込み権限を付与してください。

WinSCP の設定

以下の WinSCP ドキュメントを参考に、WinSCP の設定をおこないます。

Connecting securely to Amazon EC2 server with SFTP::WinSCP

WinSCP を開き、以下のように入力します。

  • 転送プロトコル:SFTP
  • ホスト名:EC2(RHEL9)のインスタンス ID
  • ポート番号:22
  • ユーザー名:ec2-user

入力したら、「設定」をクリックします。

「高度なサイトの設定」画面が開きます。
[接続] - [プロキシ] で以下のように入力します。

  • プロキシ形式:ローカル
  • ローカルプロキシコマンド
    • aws ssm start-session --target %host --document-name AWS-StartSSHSession --parameters "portNumber=%port" --profile <aws profile> --region <region>

ローカルプロキシコマンドは、セッションを張るためのコマンドです。<aws profile> には、AWS CLI を設定したときのプロファイルをいれてください。私は今回 default プロファイルを使用します。リージョンは任意で入力してください。

私は以下のローカルプロキシコマンドを入力しました。

aws ssm start-session --target %host --document-name AWS-StartSSHSession --parameters "portNumber=%port" --profile "default"

[SSH] - [認証] で、ダウンロードしたキーペア秘密鍵の場所を入力します。
入力できたら「OK」をクリックします。

「ログイン」をクリックします。

初めて接続する際は、以下のように警告が出ます。このまま「はい」で進めます。

WinSCP から EC2(RHEL9)に接続できました。

ファイルを転送

手元の Windows 11 端末のエクスプローラーから、WinSCP にテストファイルをドラッグ&ドロップします。

確認画面が出ます。「OK」をクリックします。

テストファイルを EC2 上にアップロードできました。

セッションマネージャーからもファイルの一覧を見てみると、ちゃんと「test.txt」が追加されたことが確認できます。

[ec2-user@ip-10-1-10-94 ~]$ ls -la
total 12
drwx------. 3 ec2-user ec2-user  90 Oct 31 02:40 .
drwxr-xr-x. 4 root     root      38 Oct 31 02:21 ..
-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
drwx------. 2 ec2-user ec2-user  29 Oct 31 02:29 .ssh
-rw-r--r--. 1 ec2-user ec2-user   0 Aug 12 13:32 test.txt
[ec2-user@ip-10-1-10-94 ~]$

ファイルを EC2 上で作成

WinSCP でファイルを作成してみます。
空白部分で右クリックし、[新規] - [ファイル] をクリックします。

任意のファイル名を入力し、「OK」をクリックします。

ファイルの中身を編集できます。
左上の上書き保存のアイコンで上書き保存し、右上の×をクリックして作成したファイルを閉じます。

WinSCP 上で作成したファイルが表示されているのが分かります。

セッションマネージャーからもファイルの一覧を見てみると、ちゃんと「test_EC2_file.txt」が追加されたことが確認できます。

[ec2-user@ip-10-1-10-94 ~]$ ls -la
total 16
drwx------. 3 ec2-user ec2-user 115 Oct 31 02:42 .
drwxr-xr-x. 4 root     root      38 Oct 31 02:21 ..
-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
drwx------. 2 ec2-user ec2-user  29 Oct 31 02:29 .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 ~]$

ファイルをダウンロード

WinSCP 上で見えている EC2(RHEL9)上のファイルを、ドラッグ&ドロップで手元の Windows 11 端末にコピーすることもできます。

手元の Windows 11 端末でコピーしたファイルを開けました。

参考