SCP 権限が拒否されました: なぜ発生するのか、そしてどのように解決するのか
SCPは、SSH経由でファイルを転送するためのオープンソースツールです。Linuxやその他のサポートされているオペレーティングシステムで使用して、SSH経由でファイルを転送できます。SSH接続を使用して2つのホスト間でファイルを転送するのに使用できます。

発生する可能性があります 「アクセスが拒否されました」というエラー SCPではいくつかの理由から、 ルートの定義が間違っている أو 許可書の書き方に誤りがありますこのエラーが発生する原因とその修正方法のいくつかについて説明します。
理由: 書き込み権限がない
このエラーが発生する理由の一つは ユーザーに書き込み権限がありません。 ファイルの書き込み先となるホスト上の特定のディレクトリの権限を確認するには、 「ls -l」コマンドを使用する書き込み権限が表示されます。

「w」の文字を探してください 出力の最初の列の最初の4文字以内。もしそれが表示されたら、それは ユーザーに書き込み権限があります したがって、ディレクトリです。あるいは、touchコマンドを使用してそのディレクトリにファイルを作成することもできます。「permission denied」などのエラーが表示されない場合は、ユーザーに書き込み権限があることを意味します。
例:
SCP を使用してファイルをリモート ホストにコピーしようとしたが、書き込み権限が原因で「アクセスが拒否されました」というエラーが表示されたとします。
scp abcd.txt ユーザー@127.0.0.1:/home/abcduser/abcd.txt
解決策1: ルートアカウントを使用してファイルを転送する
このようなエラーを修正するには、 書き込み権限を与える必要があります ユーザーがそのディレクトリにアクセスするには、root権限またはsudo権限が必要です。また、ユーザーが書き込み権限を持つディレクトリにファイルをコピーすることもできます。
このようなシナリオでは、現在のユーザーに /home/abcduser への書き込み権限を与えるか、root ユーザー アカウントを使用してこのファイルをコピーする必要があります。
root ユーザーが scp を使用してファイルをコピーできるようにするには、ssh 経由の root ログインを許可する必要があります。これはセキュリティ上の理由から推奨されませんが、このようなシナリオではとにかく使用して、後で無効にすることができます。
これを行うには、次のように開きます OpenSH 設定ファイルは /etc/ssh/sshd_config にあります。 وPermitRootLoginに関するコメントを削除します リモート ホスト上のテキスト エディターで。

次に、ルート アカウントを使用してリモート ホストに接続します。
次に、次のコマンドを実行します。
scp abcd.txt root@127.0.0.1:/abcduser/abcd.txt
あるいは、単純に、これでうまくいきます。
scp abcd.txt 127.0.0.1:/abcduser/abcd.txt
なぜならそれらは同一だからです。
解決策 2: ユーザーを書き込み権限グループに追加します。
Linux でユーザーがディレクトリ/ファイルに書き込めるようにするには、そのディレクトリまたはファイルを所有するグループにユーザーを追加するか、ファイルの所有者をそのユーザーにする必要があります。
この例では、リモート システムの /home/ ディレクトリで ls -l を実行して、/home/abcd を所有しているグループを調べます。
`ls -l` コマンドを実行すると、4 列目の内容が対応するディレクトリ/ファイルを所有するグループである出力が表示されます。

この例では、`abcduser`グループがディレクトリ`/home/abcduser`を所有しているので、
このコマンドをリモート システムで実行するだけです。
sudo グループ追加 ユーザー abcd
それはグループだ 「abcd」 ユーザーを所属させたいグループ、およびグループを変更したいユーザーは「user」です。
`ls -l`コマンドを再度実行し、 6番目の位置に「w」の文字があるのを見ました 最初の列の exit から、グループがこのディレクトリに対する書き込み権限を持っていることを意味します。
次に、コマンドを再度実行します。この場合は次のようになります。
scp abcd.txt ユーザー@somepc:/home/abcduser/abcd.txt
解決策 3: このディレクトリを所有するユーザーを使用してファイルをコピーします。
最も簡単な解決策は、このディレクトリを所有するユーザーがファイルをそこにコピーすることです。
ディレクトリに対して「ls -l」を実行するだけです。今回の場合は以下のようになります。
ls -l /ホーム/

3 列目に出力されるのは、目的のディレクトリ名に対応するディレクトリを所有するユーザーです。この場合、上のスクリーンショットに示すように、`abcduser` がディレクトリ `/home/abcduser` を所有しています。
次に、`scp` を使用してファイルをリモート ホストにコピーするときに、この特定のアカウントを使用します。
この例では、次のようにコマンドを実行します。
scp abcd.txt abcduser@127.0.0.1:/home/abcduser/abcd.txt
理由 2: リモート ホストにはそのユーザーの秘密キーがありません。
ホスト間でファイルを転送しようとすると、「scp 権限が拒否されました」(公開鍵) というエラーが表示される場合があります。
これは `ssh` の認証の問題であり、その理由は、`scp` の実行中に秘密鍵を追加しなかったことにあります。
例:
scp somefile user@127.0.0.1:/home/user/somefile.txt
ソリューション:
その簡単な解決策は `-i` フラグを付けて `scp` コマンドを実行するしたがって、リモート ホストに接続してファイルを転送するユーザーの秘密キーを追加します。
そのユーザーの秘密鍵を持っていることを確認する必要があります。持っていない場合は、リモート マシンで秘密鍵を作成し、`scp` ツールが `-i` タグを使用してその秘密鍵を使用するようにする必要があります。
私たちの場合、解決策は次のようになります。
scp -i key.pem somefile user@127.0.0.1:/home/user/somefile.txt
ここで、`key.pem` はユーザー 'user' の秘密鍵ファイルです。
ملاحظة: 私たちは使用しました `127.0.0.1` リモート ホストは単なる例ですが、この場合、リモート ホストはローカル デバイスではなくリモート デバイスである可能性が高くなります。
コメントは締め切りました。