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

リモートにファイルをディレクトリごとアップロードするためにscpコマンドを使うことがあります。

$ scp -r -i [鍵].pem [ローカルファイルパス] ec2-user@[アップロード先IPアドレス]:[アップロード先ディレクトリパス]

Permission deniedが出る場合がある

$ scp -r -i [鍵].pem [ローカルファイルパス] ec2-user@[アップロード先IPアドレス]:[アップロード先ディレクトリパス]
scp: /var/www/html/wordpress: Permission denied

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

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

作る前

$ scp -r -i [鍵].pem wordpress ec2-user@[アップロード先IPアドレス]:/var/www/html
scp: /var/www/html/wordpress: Permission denied

作った後

$ scp -r -i [鍵].pem wordpress ec2-user@[アップロード先IPアドレス]:/var/www/html
scp: /var/www/html/wordpress/wp-config.php: Permission denied
scp: /var/www/html/wordpress/wp-trackback.php: Permission denied
scp: /var/www/html/wordpress/wp-cron.php: Permission denied
scp: /var/www/html/wordpress/index.php: Permission denied
scp: /var/www/html/wordpress/wp-activate.php: Permission denied
scp: /var/www/html/wordpress/xmlrpc.php: Permission denied
scp: /var/www/html/wordpress/wp-config-sample.php: Permission denied
scp: /var/www/html/wordpress/wp-links-opml.php: Permission denied
scp: /var/www/html/wordpress/readme.html: Permission denied
scp: /var/www/html/wordpress/wp-mail.php: Permission denied
scp: /var/www/html/wordpress/wp-load.php: Permission denied
scp: /var/www/html/wordpress/wp-settings.php: Permission denied
scp: /var/www/html/wordpress/wp-comments-post.php: Permission denied
scp: /var/www/html/wordpress/wp-admin: Permission denied
scp: /var/www/html/wordpress/wp-includes: Permission denied
scp: /var/www/html/wordpress/wp-login.php: Permission denied
scp: /var/www/html/wordpress/wp-blog-header.php: Permission denied
scp: /var/www/html/wordpress/license.txt: Permission denied
scp: /var/www/html/wordpress/wp-content: Permission denied
scp: /var/www/html/wordpress/wp-signup.php: Permission denied

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

権限変更

$ chmod 777 wordpress/

これで上記のscpコマンドでアップロードできるはずです。