Dragon Arrow written by Tatsuya Nakaji, all rights reserved animated-dragon-image-0164

EC2-ローカル間でのファイル転送

Jun 15, 2019

EC2-ローカル間でのファイル転送


目的: ローカル内でエクスポートしたDBのダンプファイルをEC2に転送させたかった。初めは$viコマンドでファイル作成&貼り付けで済んでいたのだが、重いファイルだとviコマンドでは貼り付け先でフリーズを起こす。よって、コマンドを使用することにした。


ちなみに、scpはsshとcopyを意味するらしい


ローカル:Mac
Amazon EC2:Amazon Linux


EC2 → ローカル 転送

scp -i [公開鍵ファイルのパス] [ユーザ名@ドメイン]:[送信元EC2ファイルパス] [転送先ローカルファイルパス]

# 例
scp -i /keys/hoge.pem user@ec2-xxxx.com:/sqls/hoge.sql /Desktop


ローカル → EC2 転送

scp -i [公開鍵ファイルのパス] [送信元先ローカルファイルパス] [ユーザ名@ドメイン]:[転送先EC2ファイルパス]

# 例
scp -i /keys/hoge.pem /Desktop/hoge.sql user@ec2-xxxx.com:/sqls


筆者の場合は

$scp -i ~/.ssh/EC2/ec2_key_rsa ~/DIARY/dragonarrow/latest.dump tatsuya@xx.xx.xx.xx:/var/www/rails/myApp/ 

これで /var/www/rails/myApp配下にlatest.dumpが作成されました。

ec2-userでやるとmyAppの権限でエラーを出したため、権限ユーザーでアクセスしました。


scpコマンドでPermission deniedが出るときの対処法

原因が二つあり、一つはアップロード先にアップロードのためのディレクトリが用意されていないこと、もう一つは権限の問題。

一つ目に関してはアップロード先のディレクトリにアップロードするディレクトリと同名のディレクトリを用意してあげることで解決する。


二つ目の問題については、アップロードするディレクトリのローカルにおける権限と、アップロード先に用意したディレクトリの権限の両方を気にしてあげる必要がある。権限を持つuserを指定してscpするか、一時的に777にしてあげるのもあり(ほんとは危険・・・)

$ chmod 777 myApp/


まとめ

scpコマンド便利、ありがたや。