Session Manager Port Forwarding経由でローカルMacからEC2にSFTP転送してみる
はじめに
かつまたです。
EC2 にファイルを転送したいけど、セキュリティグループでポートを開放したくないケースありませんか?
AWS Systems Manager Session Manager のポートフォワーディング機能を使えば、インバウンドポートの開放なしに、手元の FileZilla から EC2 へ SFTP でファイル転送ができます。
S3を経由したファイルアップロード方法も考えられますが、運用コストや既存手順からの大幅変更、といった側面から回避したい場面もあると思います。
今回は、ローカル Mac の環境準備からファイル転送まで一通りやってみました。
Windowsでの Session Manager プラグイン利用方法は以下ブログをご参照ください。
前提条件
以下が構成図となり、AWSリソースについては作成済みです。

構成
- 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
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
インストール確認
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 の設定
秘密鍵の登録
- [FileZilla] → [設定]
- 左メニュー: [接続] → [SFTP]
- [鍵ファイルの追加] をクリック
- 対象の秘密鍵ファイルを選択
- [OK] で閉じる

サイトマネージャーで接続設定
[ファイル] → [サイトマネージャー] → [新しいサイト] で以下を設定します。
| 項目 | 設定値 |
|---|---|
| プロトコル | SFTP - SSH File Transfer Protocol |
| ホスト | 127.0.0.1 |
| ポート | 22 番と区別しやすい任意のポート(例:13022) |
| ログオンタイプ | 鍵ファイル |
| ユーザー | ec2-user |
| 鍵ファイル | 秘密鍵のパス(登録済みなら自動選択) |
⚠️ ホストは
localhostではなく127.0.0.1を指定してください。

[接続] をクリックします。
初回接続時に「不明なホスト鍵」ダイアログが表示されるので、「今後もこのホストを常に信頼する」にチェックして [OK] をクリックします。
5. ファイル転送
接続が成功すると、以下のようなログが表示されます。
状態: 127.0.0.1:13022 に接続中...
状態: Connected to 127.0.0.1
状態: "/home/ec2-user" のディレクトリ リストの表示に成功しました
トンネル側のターミナルにも Connection accepted と表示されます。
アップロード(ローカル → EC2)
転送したいファイルを左側(ローカル)から右側(EC2)にドラッグ&ドロップ

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

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月 アノテーション㈱から社名変更しました







