0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Windowsから秘密鍵を使ってSCPでEC2のファイルを取得する方法

0
Posted at

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"

ポイントは、

  1. 秘密鍵を-iで指定する
  2. EC2側のユーザー名を確認する
  3. 初回接続時は接続先のフィンガープリントを確認する
  4. Windows側のパスは必要に応じて"で囲む
  5. SSH(TCP/22)が適切な送信元から許可されていることを確認する

というところです。

GUIの転送ツールを用意しなくても、SSH接続環境が整っていればPowerShellからそのままファイルを取得できます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?