🗂

ローカルからEC2へSCPコマンドを実行したら"Permission denied" というエラーメッセージが表示された場合の対処法

2023/11/04に公開

scp 自分用

それぞれの解決策について詳しく説明します。

解決策1: sudoを使用する

この方法では、まずは一時ディレクトリ(例)にファイルをコピーし、その後、リモートマシンにSSHでログインして、を使用してファイルをディレクトリに/tmpに移動people_3.csvし
/etc/logstashに移動させる。

一時ディレクトリにファイルをコピー:以下のコマンドは、ローカルをリモートサーバーのディレクトリpeople_3.csvに/tmpコピーします。

scp -i AWS-ELKstack-koutiku△.pem /home/ec2-user/environment/people_3.csv ec2-user@××.××.××.××:/tmp

リモート サーバーに SSH でログインしてファイルを移動します: 次に、SSH でリモート サーバーにログインして、を使用してファイルをディレクトリに移動しsudoます/etc/logstash

ssh -i AWS-ELKstack-koutiku△.pem ec2-user@××.××.××.×× "sudo mv /tmp/people_3.csv /etc/logstash"

解決策2: ディレクトリの権限を変更する
この方法では、リモート サーバー上のディレクトリの許可を/etc/logstash変更して、ファイルをec2-user直接コピーできるようにします。

リモートサーバーにSSHでログイン:
ssh -i ELKstack-koutiku△.pem ec2-user@××.××.××.××
パーミッションを変更:
/etc/logstashディレクトリの所有者をec2-user変更するか、書き込み権限を追加します。
sudo chown ec2-user:ec2-user /etc/logstash
または
sudo chmod 777 /etc/logstash
再びローカルマシンからファイルをコピー:
scp -i AWS-ELKstack-koutiku-01.pem /home/ec2-user/environment/people_3.csv ec2-user@52.194.66.91:/etc/logstash

いずれの方法も、/etc/logstashディレクトリにファイルをコピーするためのアクセス権を確保します。セキュリティを考慮して、最も適切な方法を選択してください。

解決策2の(事例): ディレクトリの権限を変更するローカルからEC2へSCPコマンドを実行

SCP (Secure Copy) コマンドを使用して、ローカルマシンの指定したディレクトリをEC2インスタンスにコピーするコマンドを実行したら"Permission denied"と返ってきてしまったので、その解決方法を記します。

前提:OSはUbuntu 18.04.3 LTSです。

解決手順
以下のコマンドを実行することで、ローカルマシンの/Users/hogehoge/foofoo/wpsample_homepageディレクトリを、EC2インスタンスの/var/www/htmlディレクトリにコピーすることができます。

$ scp -i /path/to/sample_homepage_key.pem -r /Users/hogehoge/foofoo/wpsample_homepage ubuntu@11.222.333.444:/var/www/html/
これでいけるはず...と思ったら、以下のように出てきた
scp: /var/www/html//wpsample_homepage: Permission denied
エラーメッセージ"Permission denied"は、EC2インスタンスに対してコピー先のディレクトリに書き込み権限がないことを示しているよう。これは、コピー先のディレクトリに対するアクセス権が不足していることが原因と思われますので、以下のコマンドを使用して、コピー先のディレクトリに対して適切な権限を付与してみます(755=EC2インスタンス上でのファイルの書き込みが可能になる)。
$ sudo chmod -R 755 /var/www/html
権限を変更して、再度scpコマンドを実行したら...また以下のように表示された。
scp: /var/www/html//wpsample_homepage: Permission denied
sudo suを実行して、rootユーザーに切り替え、777にしてみる。
777=全てのユーザーに書き込み権限を付与
$ sudo su
$ chmod 777 /var/www/html
再度、scpコマンドを実行して、ファイルをコピーします。
$ scp -i sample_homepage_key.pem -r /Users/hogehoge/foofoo/wpsample_homepage  ubuntu@11.222.333.444:/var/www/html/
これでファイルがコピーされました。

ただし、セキュリティ上の理由から、全てのユーザーに書き込み権限を与えることは推奨されないとのこと。ファイルのパーミッションを適切に設定することが推奨されています。
各オプションの説明
-i sample_homepage_key.pem: リモートホストにログインするために使用する秘密鍵ファイルを指定します。-i オプションは、identity file の略称で、秘密鍵を指定するために使用されます。
-r: ディレクトリを再帰的にコピーするためのオプションです。このオプションを使用しない場合、ファイルのみがコピーされます。
/Users/hogehoge/foofoo/wpsample_homepage: コピーするローカルマシンのディレクトリパスを指定します。
ubuntu@11.222.333.444:/var/www/html/: リモートマシンにコピー先のパスを指定します。ubuntu は、リモートマシンにログインするためのユーザ名で、11.222.333.444は、リモートマシンのIPアドレスです。:/var/www/html/は、リモートマシンにコピー先のディレクトリパスを指定します。

Discussion