Session Manager Port Forwarding経由でローカルMacからEC2にSFTP転送してみる

Session Manager Port Forwarding経由でローカルMacからEC2にSFTP転送してみる

2026.04.08

はじめに

かつまたです。

EC2 にファイルを転送したいけど、セキュリティグループでポートを開放したくないケースありませんか?

AWS Systems Manager Session Manager のポートフォワーディング機能を使えば、インバウンドポートの開放なしに、手元の FileZilla から EC2 へ SFTP でファイル転送ができます。
S3を経由したファイルアップロード方法も考えられますが、運用コストや既存手順からの大幅変更、といった側面から回避したい場面もあると思います。

今回は、ローカル Mac の環境準備からファイル転送まで一通りやってみました。

Windowsでの Session Manager プラグイン利用方法は以下ブログをご参照ください。

https://dev.classmethod.jp/articles/installed-session-manager-plugin-and-connected-from-local-windows-pc/

前提条件

以下が構成図となり、AWSリソースについては作成済みです。

SFTP-SSM-Port-Forward.png

構成

  • EC2(Amazon Linux 2023)がパブリックサブネットに起動済み
  • EC2 に インスタンスプロファイル(AmazonSSMManagedInstanceCore)アタッチ済み
  • EC2 が SSM マネージドインスタンスとして登録済み
  • EC2 に SSH キーペアが設定済み
  • セキュリティグループにインバウンドルールなし

ローカル PC に必要なもの

項目 用途
FileZilla SFTP ファイル転送クライアント
秘密鍵(.pem) EC2 への SSH 認証に使用

やってみる

1. AWS CLI v2 のインストール

macOS

curl "https://awscli.amazonaws.com/AWSCLIV2.pkg" -o "AWSCLIV2.pkg"
sudo installer -pkg AWSCLIV2.pkg -target /
rm AWSCLIV2.pkg

インストール確認

aws --version

aws-cli/2.x.x のようにバージョンが表示されれば OK です。

インストール後、aws configure で認証情報を設定しておきます。

aws configure

https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/getting-started-install.html

2. Session Manager Plugin のインストール

macOS(Apple Silicon)

curl "https://s3.amazonaws.com/session-manager-downloads/plugin/latest/mac_arm64/sessionmanager-bundle.zip" \
    -o "sessionmanager-bundle.zip"
unzip sessionmanager-bundle.zip
sudo ./sessionmanager-bundle/install \
    -i /usr/local/sessionmanagerplugin \
    -b /usr/local/bin/session-manager-plugin
rm -rf sessionmanager-bundle sessionmanager-bundle.zip

macOS(Intel)

curl "https://s3.amazonaws.com/session-manager-downloads/plugin/latest/mac/sessionmanager-bundle.zip" \
    -o "sessionmanager-bundle.zip"
unzip sessionmanager-bundle.zip
sudo ./sessionmanager-bundle/install \
    -i /usr/local/sessionmanagerplugin \
    -b /usr/local/bin/session-manager-plugin
rm -rf sessionmanager-bundle sessionmanager-bundle.zip

https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/session-manager-working-with-install-plugin.html

インストール確認

session-manager-plugin --version

バージョン番号(例: 1.2.707.0)が表示されれば OK です。

3. SSM Port Forwardingの確立

ローカル PC のターミナルで以下を実行します。

aws ssm start-session \
    --target "<インスタンスID>" \
    --document-name AWS-StartPortForwardingSession \
    --parameters '{"portNumber":["22"],"localPortNumber":["13022"]}' \
    --region ap-northeast-1

以下の出力が表示されれば、トンネルが確立されています。

Starting session with SessionId: user-xxxxx
Port 13022 opened for sessionId user-xxxxx.
Waiting for connections...

4. FileZilla の設定

秘密鍵の登録

  1. [FileZilla] → [設定]
  2. 左メニュー: [接続] → [SFTP]
  3. [鍵ファイルの追加] をクリック
  4. 対象の秘密鍵ファイルを選択
  5. [OK] で閉じる

スクリーンショット 2026-04-07 20.21.19.png

サイトマネージャーで接続設定

[ファイル] → [サイトマネージャー] → [新しいサイト] で以下を設定します。

項目 設定値
プロトコル SFTP - SSH File Transfer Protocol
ホスト 127.0.0.1
ポート 22 番と区別しやすい任意のポート(例:13022)
ログオンタイプ 鍵ファイル
ユーザー ec2-user
鍵ファイル 秘密鍵のパス(登録済みなら自動選択)

⚠️ ホストは localhost ではなく 127.0.0.1 を指定してください。

スクリーンショット 2026-04-07 22.10.44.png

[接続] をクリックします。

初回接続時に「不明なホスト鍵」ダイアログが表示されるので、「今後もこのホストを常に信頼する」にチェックして [OK] をクリックします。

5. ファイル転送

接続が成功すると、以下のようなログが表示されます。

状態: 127.0.0.1:13022 に接続中...
状態: Connected to 127.0.0.1
状態: "/home/ec2-user" のディレクトリ リストの表示に成功しました

トンネル側のターミナルにも Connection accepted と表示されます。

アップロード(ローカル → EC2)

転送したいファイルを左側(ローカル)から右側(EC2)にドラッグ&ドロップ

スクリーンショット 2026-04-07 20.29.36.png

EC2内確認

コンソールからSession Manager接続して、以下コマンドにてEC2内に該当のファイルが存在することを確認しました。

スクリーンショット 2026-04-08 10.35.59.png

sudo ls -la /home/ec2-user/sftp-test.txt
-rw-rw-r--. 1 ec2-user ec2-user 68 Apr  7 11:29 /home/ec2-user/sftp-test.txt

6. 次回以降の接続手順

毎回の手順はシンプルです。

# ターミナルでトンネル開始
aws ssm start-session \
    --target "<インスタンスID>" \
    --document-name AWS-StartPortForwardingSession \
    --parameters '{"portNumber":["22"],"localPortNumber":["13022"]}' \
    --region ap-northeast-1

# FileZilla → サイトマネージャー → 保存したサイト → 接続

切断時は FileZilla を切断してから、ターミナルで Ctrl + C でトンネルを終了します。

7. 詰まりポイント localhost vs 127.0.0.1

今回の検証で一番詰まった部分がここでした。

FileZilla のホストに localhost を設定すると、以下のエラーで接続できませんでした。

エラー: 非アクティブになってから 20 秒後に接続がタイムアウトになりました
エラー: サーバーに接続できません

原因は IPv6 の優先解決だと考えられました。

ホスト名 解決先 結果
localhost ::1(IPv6)が優先される場合がある タイムアウト
127.0.0.1 IPv4 を直接指定 接続成功

SSM のポートフォワーディングは IPv4(127.0.0.1)でのみリッスンするため、localhost だと IPv6 を試行してタイムアウトします。
Session Manager に限らず、ローカルのポートフォワーディングに接続する際は 127.0.0.1 を明示的に指定するのが安全です。

SSM のポートフォワーディングが IPv4 のみでリッスンしていることは、
以下のコマンドで確認できます。

lsof -i :13022

出力例

COMMAND     PID   USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
session-m 90859   user   19u  IPv4 0x9dcf3dcf016cb5d8      0t0  TCP localhost:13022 (LISTEN)

おわりに

ご覧いただきありがとうございました。

Session Manager のポートフォワーディングを使えば、セキュリティグループでポートを開放せずに FileZilla から SFTP 転送ができました。

ポイント

  • ローカル PC には AWS CLI + Session Manager Plugin が必要
  • FileZilla のホストは 127.0.0.1
  • トンネル用のターミナルは開いたまま維持する

踏み台サーバーの管理やセキュリティグループの穴あけが不要になるので、セキュリティを保ちながらファイル転送が可能になります。

クラスメソッドオペレーションズ株式会社について

クラスメソッドグループのオペレーション企業です。
運用・保守開発・サポート・情シス・バックオフィスの専門チームが、IT・AIをフル活用した「しくみ」を通じて、お客様の業務代行から課題解決や高付加価値サービスまでを提供するエキスパート集団です。
当社は様々な職種でメンバーを募集しています。
「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、クラスメソッドオペレーションズ株式会社 コーポレートサイト をぜひご覧ください。
※2026年1月 アノテーション㈱から社名変更しました

この記事をシェアする

関連記事