AWS EC2上にあるファイルをWindows PCへ取得したいとき、PowerShellからscpコマンドを使って簡単に転送できます。
今回は、EC2へのSSH接続に使用している秘密鍵(.pem)を指定して、EC2 → Windowsへファイルをコピーする方法を備忘録としてまとめます。
環境
- Windows 11
- PowerShell
- OpenSSH / SCPが利用可能
- Amazon EC2(Linux)
- SSH接続用の秘密鍵(
.pem)を所持している
基本のコマンド
EC2上のファイルをWindowsへ取得する場合、基本形は以下です。
scp -i "C:\path\to\key.pem" ec2-user@<EC2のIPアドレス>:/path/to/file "C:\path\to\destination"
例えば、EC2の/tmpにあるbackup.tar.gzをWindowsのDownloadsフォルダへ取得する場合は以下のようになります。
scp -i "C:\Users\username\.ssh\example-key.pem" ec2-user@203.0.113.10:/tmp/backup.tar.gz "C:\Users\username\Downloads"
それぞれ、
-
-i:SSH接続に使用する秘密鍵を指定 -
ec2-user:EC2へログインするユーザー -
203.0.113.10:EC2のパブリックIPアドレス -
/tmp/backup.tar.gz:EC2上の取得したいファイル -
C:\Users\username\Downloads:Windows側の保存先
を表しています。
ディレクトリごと取得する場合
ファイルではなく、ディレクトリを丸ごと取得したい場合は-rオプションを付けます。
scp -i "C:\Users\username\.ssh\example-key.pem" -r ec2-user@203.0.113.10:/tmp/example-directory "C:\Users\username\Downloads"
-rはrecursive(再帰的)の意味で、指定したディレクトリ配下をまとめてコピーできます。
単一ファイルだけを取得する場合、-rは不要です。
初回接続時に確認メッセージが表示された場合
そのPCからEC2へ初めて接続する場合、以下のようなメッセージが表示されることがあります。
The authenticity of host '203.0.113.10 (203.0.113.10)' can't be established.
ED25519 key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
Are you sure you want to continue connecting (yes/no/[fingerprint])?
ここに表示されるfingerprint(フィンガープリント)は、接続先サーバーを識別するための「指紋」のような情報です。
初めて接続するサーバーはまだWindows側に登録されていないため、
このサーバーには初めて接続します。この接続先を信頼して登録してよいですか?
という確認が行われています。
接続先のIPアドレスやフィンガープリントを確認し、自分が接続しようとしているEC2であることを確認できた場合に、
yes
と入力します。
すると、次のようなメッセージが表示されます。
Warning: Permanently added '203.0.113.10' (ED25519) to the list of known hosts.
接続先の情報がknown_hostsに登録され、次回以降は同じ接続先であれば通常この確認は表示されません。
逆に、以前登録した接続先とサーバーの鍵が異なる場合にはSSHから警告が表示されます。
そのため、初回接続時の確認は単にyesを入力するのではなく、接続先が正しいことを確認してから進めます。
転送できたことを確認する
転送が正常に完了すると、以下のように進捗が表示されます。
backup.tar.gz 100% 11KB 500.0KB/s 00:00
Windows側の保存先を確認し、ファイルが存在すれば転送完了です。
PowerShellから確認する場合は、例えば以下のように実行できます。
Get-ChildItem "C:\Users\username\Downloads\backup.tar.gz"
接続できない場合の確認ポイント
1. EC2へSSH接続できるか
まず通常のSSH接続が可能か確認します。
ssh -i "C:\Users\username\.ssh\example-key.pem" ec2-user@203.0.113.10
SSH自体が接続できない場合は、SCPより先にEC2側の接続設定を確認します。
2. Security GroupでSSHが許可されているか
EC2のSecurity Groupで、SSH(TCP/22)へのアクセスが許可されている必要があります。
インターネット経由で接続する場合、送信元を0.0.0.0/0で無制限に許可するのではなく、必要な送信元IPアドレスなどに絞る方が安全です。
3. ログインユーザーが正しいか
AMIによってSSH接続時のユーザー名が異なります。
例えばAmazon Linuxでは一般的に、
ec2-user
を使用します。
Ubuntu系AMIでは、
ubuntu
など、異なるユーザー名が使用されます。
4. Windows側のパスにスペースが含まれている場合
秘密鍵や保存先のパスにスペースが含まれている場合は、パス全体を"で囲みます。
scp -i "C:\Users\username\My Keys\example-key.pem" ec2-user@203.0.113.10:/tmp/backup.tar.gz "C:\Users\username\My Downloads"
まとめ
EC2からWindowsへファイルを取得するだけなら、PowerShellから以下のように実行できます。
scp -i "C:\path\to\key.pem" ec2-user@<EC2のIPアドレス>:/path/to/file "C:\path\to\destination"
ディレクトリごと取得する場合は-rを追加します。
scp -i "C:\path\to\key.pem" -r ec2-user@<EC2のIPアドレス>:/path/to/directory "C:\path\to\destination"
ポイントは、
- 秘密鍵を
-iで指定する - EC2側のユーザー名を確認する
- 初回接続時は接続先のフィンガープリントを確認する
- Windows側のパスは必要に応じて
"で囲む - SSH(TCP/22)が適切な送信元から許可されていることを確認する
というところです。
GUIの転送ツールを用意しなくても、SSH接続環境が整っていればPowerShellからそのままファイルを取得できます。