[EC2] scpコマンドで、ファイルのダウンロード/アップロード
こんにちは、@yoheiMuneです。
今日はEC2などのsshが繋がるサーバーから、scpというコマンドを用いてファイルのダウンロード/アップロードする方法を、ブログに書きたいと思います。
サーバー上に以下のようなディレクトリ(mydir)があるとします。
Macでの利用方法は以下のリンクを参照ください。
[Mac] ターミナルでファイルをツリー構造で表現できるtreeコマンド
AmazonLinux上では、yum経由でインストールできます。
最後になりますが本ブログでは、Linux、Python、フロントエンド、Swift、PHP、Node.js、Java、インフラ、Go言語、機械学習、などの技術トピックを発信をしていきます。「プログラミングで困ったその時の、解決の糸口に!」そんな目標でブログを書き続けています。ぜひ、本ブログのRSSやTwitterをフォローして貰えたら嬉しいです ^ ^
最後までご覧頂きましてありがとうございました!
今日は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言語、機械学習、などの技術トピックを発信をしていきます。「プログラミングで困ったその時の、解決の糸口に!」そんな目標でブログを書き続けています。ぜひ、本ブログのRSSやTwitterをフォローして貰えたら嬉しいです ^ ^
最後までご覧頂きましてありがとうございました!