はじめに
SCPコマンドを使って、ローカル環境からリモート環境にファイルをコピーしようとしたところ、Permission deniedのエラーが出たため、そのトラブルシュートの記事です。
環境
Ubuntu20.4
内容
結論を言えば、コピー先のディレクトリにファイルを書き込む権限がなかったとことが原因です。
次のコマンドで「権限がありません」と言われました。
$scp -r /hoge hoge-user1@remote-hostname:/hoge
Permission denied
そして、コピー先のhogeディレクトリの権限を確認してみます。
hogeディレクトリの所有者はhoge-user2です。hoge-user2ユーザーであれば、hogeディレクトリへの書き込みはできるようになっています。しかし、hoge-user2以外のユーザーからの書き込みに関しては、権限が付与されていません。SCPコマンドでは、hoge-user1ユーザーで書き込みをしようとしたため、権限がありませんといわれてしまいました。
$ls -la
drwxr-xr-x 2 hoge-user2 hoge-user2 4096 5月 10 11:09 hoge
方法その1
SCPでコピーするときに、ユーザーをコピー先のディレクトリの所有者と同じユーザーを指定すればコピーができるようになります。
つまり、hoge-user1ユーザーではなく、hoge-user2ユーザーでSCPをすれば、問題なくコピーができます。
$scp -r /hoge hoge-user2@remote-hostname:/hoge
方法その2
コピー先のディレクトリの所有者を変えてしまいます。
コピー先のディレクトリの所有者を、既存のhoge-user2ユーザーからhoge-user1ユーザーに変更すれば、SCPでhoge-user1ユーザーを指定してコピーができるようになります。
hogeディレクトリの所有者とグループを、hoge-user1に変更するコマンドです。
$chown hoge-user1 /hoge
$chown :hoge-user1 /hoge
方法その3
コピー先のディレクトリで、所有者以外のユーザーからでも書き込みができるようにします。
コピー先のディレクトリの所有者はhoge-user2ユーザーのままで、hoge-user2ユーザー以外のユーザーからでもhogeディレクトリへの書き込みができるように権限を付与してあげればOKです。
hogeディレクトリの権限は、もともと、755になっており、他ユーザーからの書き込みはできないようになっていました。他ユーザーからの書き込みができるように、755→757に変更します。
これで、SCPでhoge-user1ユーザーからhoge-user2ユーザーが所有するディレクトリにコピーすることができるようになります。
$chrom 757 /hoge