2018/03/30更新

[EC2] scpコマンドで、ファイルのダウンロード/アップロード

このエントリーをはてなブックマークに追加            

こんにちは、@yoheiMuneです。
今日はEC2などのsshが繋がるサーバーから、scpというコマンドを用いてファイルのダウンロード/アップロードする方法を、ブログに書きたいと思います。



目次




やりたいこと

AWSや各種クラウドを使う場合に、サーバーにはsshでログインできる環境が多いと思います。その状態の場合にはscpというコマンドを使うことで、サーバー上のファイルをダウンロードしたり、自分のPCからサーバーへアップロードしたりすることができます。サーバー上のログをダウンロードしたい、MySQLのダンプをダウンロードしたい、といったユースケースで利用でき便利です。



前提:sshでログインできること

今回はEC2(Amazon Linux)を前提に、以下のコマンドでサーバーにログインできる状態とします。
# sshでログイン
ssh -i ~/my.pem ec2-user@xxx.xxx.xxx.xxx
上記のコマンドではpemファイルを用いてログインしていますが、パスフレーズなどでのログインでも問題ありません。また、OSはAmazonLinuxでなくても、他のLinux系(CentOSなど)でもOKです。



scpとは

scpは、「ssh + cp」の意味で、sshを用いてリモートサーバー上のファイルやディレクトリをダウンロード/アップロードできる機能です。



scpでダウンロード

ここではscpコマンドを用いて、サーバー上からファイルをダウンロードする方法を説明します。

ファイルのダウンロード

今回はec2-userのホームディレクトリにsample.logがあるとします。このファイルをダウンロードします。
$ ls
sample.log
このファイルをダウンロードするには、scpコマンドを以下のように使います。
# 自分のPCのターミナルで実行

# ファイルをダウンロードする
$ scp -i ~/my.pem ec2-user@xxx.xxx.xxx.xxx:/home/ec2-user/sample.log ./
#                                          ^^^^^^^^^^^^^^^^^^^^^^^^^ ^^
#                                          サーバー上のファイルパス      ダウンロード先

sample.log    100%    6     0.0KB/s   00:00 
これでファイルがダウンロードできました。

フォルダのダウンロード

また、scpに-rオプションをつけると、ディレクトリもダウンロードできます。
サーバー上に以下のようなディレクトリ(mydir)があるとします。
$ tree
.
└── mydir
    ├── 1.txt
    └── 2.txt
これをフォルダごとダウンロードするには、以下のコマンドを実行します。
# 自分のPCのターミナルで実行

# フォルダでダウンロードする
$ scp -r -i ~/my.pem ec2-user@xxx.xxx.xxx.xxx:/home/ec2-user/mydir ./
#     ^^
#     オプションを付与

1.txt    100%   18     0.1KB/s   00:00    
2.txt    100%   21     0.1KB/s   00:00



scpを用いたアップロード

続いてアップロードについて説明します。

ファイルのアップロード

ファイルのアップロードでは、以下のコマンドを実行します。
# 自分のPCのターミナルで実行.
# ファイルをアップロードする.

$ scp -i ~/my.pem secret.txt ec2-user@xxx.xxx.xxx.xxx:/home/ec2-user/
#                 ^^^^^^^^^^                          ^^^^^^^^^^^^^^^
#                 アップロードするファイル名を指定         アップロード先のディレクトリ

secret.txt    100%   14     0.1KB/s   00:00 

フォルダのアップロード

フォルダのアップロードもできます。以下のディレクトリをアップロードするとします。
$ tree
.
└── secret
    ├── friend.secret
    └── my.secret
ダウンロードと同じく、scpコマンドに-rオプションを付与します。
$ scp -r -i ~/my.pem secret ec2-user@xxx.xxx.xxx.xxx:/home/ec2-user/
#     ^^             ^^^^^^
#     オプションを付与  ディレクトリを指定

friend.secret  100%    9     0.1KB/s   00:00    
my.secret      100%    9     0.1KB/s   00:00  
このようにコマンド一発でファイルのアップロードやダウンロードができるので便利です。



ファイルへのアクセス権限に注意

scpはsshでログインするユーザー(上記の場合はec2-user)の権限で、サーバー上では振舞います。そのため権限不足などでエラーになる場合があります。



補足情報:treeコマンド

このブログではtreeコマンドを使ってディレクトリ構成を表示しました。treeコマンドは便利なのでおすすめです。

Macでの利用方法は以下のリンクを参照ください。
[Mac] ターミナルでファイルをツリー構造で表現できるtreeコマンド

AmazonLinux上では、yum経由でインストールできます。
$ sudo yum install tree



最後に

サーバー上のファイルをダウンロードするなど、開発中や運用中に一時的にやりたいことも良くあります。そんな時にscpをサクッと使えると便利なので、ぜひ使ってみてください。

最後になりますが本ブログでは、Linux、Python、フロントエンド、Swift、PHP、Node.js、Java、インフラ、Go言語、機械学習、などの技術トピックを発信をしていきます。「プログラミングで困ったその時の、解決の糸口に!」そんな目標でブログを書き続けています。ぜひ、本ブログのRSSTwitterをフォローして貰えたら嬉しいです ^ ^

最後までご覧頂きましてありがとうございました!





こんな記事もいかがですか?

RSS画像

もしご興味をお持ち頂けましたら、ぜひRSSへの登録をお願い致します。