AWSにscpでファイル転送したらPermission deniedされてググった

AWSWordpressをインストールできたので今回はEC2サーバーにファイル転送をするところまで。

少しつまずいたので、その解決策も含めてご紹介します。

EC2にssh接続をしてみる

まずはダウンロードしたpemファイルを任意のディレクトリにコピー。

$ cp blog_sample.pem ~/.ssh/blog_sample.pem

ssh接続をしてみます。

ssh -i {.pemファイル} ec2-user@{Public DNS}」で接続できます。

Public DNSAWSのコンソールの以下の赤枠のところで確認できます。

$ ssh -i ~/.ssh/blog_sample.pem ec2-user@ec2-54-199-188-193.ap-northeast-1.compute.amazonaws.com

The authenticity of host 'ec2-54-199-188-193.ap-northeast-1.compute.amazonaws.com (54.199.188.193)' can't be established.
RSA key fingerprint is 1b:10:ae:e5:9e:60:ad:01:83:32:ca:ef:97:0a:68:93.
Are you sure you want to continue connecting (yes/no)?

このような画面が出るので、yesと入力してEnterします。 すると以下の様なエラーが出てしまいました。

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for '/Users/yuichi.iwayama/.ssh/blog_sample.pem' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
bad permissions: ignore key: /Users/yuichi.iwayama/.ssh/blog_sample.pem
Permission denied (publickey).

pemファイル(Private Key Files)のアクセス権限がオープンすぎると怒られてしまいました。

なので、chmodでアクセス権限を変更して再度ssh接続します。

$ chmod 400 ~/.ssh/blog_sample.pem
$ ssh -i ~/.ssh/blog_sample.pem ec2-user@ec2-54-199-188-193.ap-northeast-1.compute.amazonaws.com

       __|  __|_  )
       _|  (     /   Amazon Linux AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-ami/2013.09-release-notes/

↑のような表示が出てssh接続ができました。

ssh接続できることが確認できたので、一旦接続を切ります。

$ exit

sshのconfigに設定を追加 毎回長いコマンドを打つのは面倒なので、設定をします。

sudo vi ~/.ssh/config

viで以下のように追記します。

Host blog_sample
  User ec2-user
  HostName ec2-54-199-188-193.ap-northeast-1.compute.amazonaws.com
  Port 22
  IdentityFile ~/.ssh/blog_sample.pem

これで上書き保存すると、

ssh blog_sample

とするだけでssh接続ができるようになります。

問題:EC2にscpでファイル転送するとpermission deniedとなる

ここまでできたところで、ファイル転送をしてみます。 Macの場合は、ターミナルからscpコマンドでファイル転送をすることができます。

AWSの公式マニュアルどおりにターミナルからscpでファイル転送をしてみます。 インストールしたWordPressのthemes以下に新しいテーマ(sampleディレクトリ)を転送してみましょう。

$ sudo scp -i ~/.ssh/blog_sample.pem -r sample ec2-user@ec2-54-199-188-193.ap-northeast-1.compute.amazonaws.com:/var/www/vhosts/i-fefef5f8/wp-content/themes

scp: /var/www/vhosts/i-fefef5f8/wp-content/themes/sample: Permission denied

* i-fefef5f8はインスタンスID

Permission deniedととなり転送ができない。

解決策:chmodで権限を変更する

ただの権限のエラーだったので、chmodコマンドですべてのユーザーがアクセスできるように権限を変更してexit。

$ ssh blog_sample
$ cd /var/www/vhosts/
$ sudo chmod -R 777 i-fefef5f8
$ exit

これでもう一度ファイル転送をしてみると。

$ sudo scp -i ~/.ssh/blog_sample.pem -r sample ec2-user@ec2-54-199-188-193.ap-northeast-1.compute.amazonaws.com:/var/www/vhosts/i-fefef5f8/wp-content/themes
sample.txt   100%   0   0.0KB/s   00:00 

転送できた!

[amazonjs asin=“B00UWCYRZK” locale=“JP” title=“Amazon Web Services パターン別構築・運用ガイド  一番大切な知識と技術が身につく”]