SCP-Zugriff verweigert: Warum das passiert und wie man es behebt
SCP ist ein Open-Source-Tool zur Dateiübertragung via SSH. Es kann unter Linux und anderen unterstützten Betriebssystemen verwendet werden, um Dateien über SSH zu übertragen. Damit lassen sich Dateien zwischen zwei Hosts über eine SSH-Verbindung austauschen.

Ein „Zugriff verweigert“-Fehler in SCP kann aus verschiedenen Gründen auftreten , beispielsweise aufgrund falsch definierter Pfade oder fehlender Schreibberechtigungen . Wir werden einige der Ursachen dieses Fehlers untersuchen und Lösungsansätze aufzeigen.
Grund: Fehlende Schreibberechtigung
Ein Grund für diesen Fehler ist, dass Ihr Benutzer keine Schreibberechtigung für das betreffende Verzeichnis auf dem Host besitzt, in das Sie die Dateien schreiben möchten. Um diese Berechtigungen zu überprüfen, können Sie den Befehl „ls -l“ verwenden , der die Schreibberechtigungen anzeigt.

Suchen Sie in der ersten Spalte der Ausgabe nach dem Buchstaben „w“ unter den ersten vier Zeichen. Wenn Sie ihn finden, besitzt Ihr Benutzer Schreibrechte für dieses Verzeichnis. Alternativ können Sie jederzeit mit dem Befehl `touch` eine Datei in diesem Verzeichnis erstellen. Erhalten Sie keine Fehlermeldung wie „Zugriff verweigert“, besitzt Ihr Benutzer Schreibrechte.
Beispiel:
Angenommen, Sie möchten eine Datei mithilfe von SCP auf einen entfernten Host kopieren und erhalten aufgrund fehlender Schreibberechtigungen die Fehlermeldung „Zugriff verweigert“.
scp abcd.txt user@127.0.0.1:/home/abcduser/abcd.txt
Lösung 1: Verwenden Sie das Root-Konto zum Übertragen von Dateien
Um diesen Fehler zu beheben, müssen Sie Ihrem Benutzer Schreibrechte für das betreffende Verzeichnis erteilen. Dazu benötigen Sie Root- oder sudo-Rechte. Alternativ können Sie die Datei in ein Verzeichnis kopieren, in dem Ihr Benutzer Schreibrechte besitzt.
In einem solchen Fall müssen Sie entweder dem aktuellen Benutzer Schreibrechte für /home/abcduser gewähren oder Sie können das Root-Benutzerkonto verwenden, um diese Datei zu kopieren.
Um einem Root-Benutzer das Kopieren einer Datei mit scp zu ermöglichen, müssen Sie die Anmeldung des Root-Benutzers über SSH erlauben. Dies wird aus Sicherheitsgründen nicht empfohlen, kann aber in solchen Fällen trotzdem verwendet und anschließend wieder deaktiviert werden.
Öffnen Sie dazu die OpenSSH-Konfigurationsdatei unter /etc/ssh/sshd_config und entfernen Sie die Kommentarzeichen vor PermitRootLogin in einem Texteditor auf dem Remote-Host.

Als Nächstes stellen Sie mit dem Root-Konto eine Verbindung zum Remote-Host her.
Führen Sie anschließend den Befehl wie folgt aus:
scp abcd.txt root@127.0.0.1:/abcduser/abcd.txt
Oder einfach ausgedrückt: Das wird genügen.
scp abcd.txt 127.0.0.1:/abcduser/abcd.txt
Weil sie identisch sind.
Lösung 2: Fügen Sie Ihren Benutzer der Schreibberechtigungsgruppe hinzu:
Damit ein Benutzer in Linux in ein Verzeichnis/eine Datei schreiben kann, muss er entweder der Gruppe hinzugefügt werden, der das Verzeichnis oder die Datei gehört, oder die Datei muss diesem Benutzer gehören.
In unserem Beispiel führen wir auf dem entfernten System den Befehl ls -l im Verzeichnis /home/ aus, um herauszufinden, welcher Gruppe /home/abcd gehört.
Der Befehl `ls -l` liefert eine Ausgabe, in der der Inhalt der vierten Spalte die Gruppe angibt, der das entsprechende Verzeichnis/die entsprechende Datei gehört.

In unserem Beispiel gehört das Verzeichnis `/home/abcduser` der Gruppe `abcduser`, und daher können wir
Führen Sie einfach diesen Befehl auf dem Remote-System aus.
sudo groupadd user abcd
Wir möchten, dass unser Benutzer der Gruppe „abcd“ angehört, und der Benutzer, dessen Gruppe wir ändern möchten, heißt „user“.
Führen Sie den Befehl `ls -l` erneut aus. Wenn Sie in der ersten Spalte der Ausgabe an sechster Stelle den Buchstaben 'w' sehen , bedeutet dies, dass die Gruppe Schreibrechte für dieses Verzeichnis besitzt.
Führen Sie den Befehl anschließend erneut aus, in unserem Fall also:
scp abcd.txt user@somepc:/home/abcduser/abcd.txt
Lösung 3: Verwenden Sie den Benutzer, dem dieses Verzeichnis gehört, um die Datei zu kopieren.
Die einfachste Lösung ist, dass der Benutzer, dem dieses Verzeichnis gehört, die Datei dorthin kopiert.
Führen Sie einfach `ls -l` im Verzeichnis aus. In unserem Fall wäre das:
ls -l /home/

Die Ausgabe in der dritten Spalte zeigt den Benutzer an, dem das Verzeichnis mit dem entsprechenden Namen gehört. In unserem Fall ist `abcduser` der Besitzer des Verzeichnisses `/home/abcduser`, wie im obigen Screenshot dargestellt.
Verwenden Sie dann dieses spezielle Konto, während Sie die Datei mit `scp` auf den Remote-Host kopieren.
In unserem Fall führen wir den Befehl wie folgt aus:
scp abcd.txt abcduser@127.0.0.1:/home/abcduser/abcd.txt
Grund 2: Der Remote-Host besitzt keinen privaten Schlüssel für diesen Benutzer.
Beim Versuch, Dateien zwischen Hosts zu übertragen, kann die Fehlermeldung „scp permission denied“ (öffentlicher Schlüssel) erscheinen.
Dies ist ein Authentifizierungsproblem für `ssh`, und der Grund dafür ist, dass Sie `scp` während der Ausführung keinen privaten Schlüssel hinzugefügt haben.
Beispiel:
scp somefile user@127.0.0.1:/home/user/somefile.txt
الحل:
Die einfachste Lösung hierfür ist, den Befehl `scp` mit dem Parameter `-i` auszuführen und so den privaten Schlüssel des Benutzers hinzuzufügen, mit dem Sie sich mit dem Remote-Host verbinden und Dateien übertragen möchten.
Sie müssen sicherstellen, dass Sie den privaten Schlüssel für diesen Benutzer besitzen. Falls Sie diesen nicht besitzen, müssen Sie ihn auf dem Remote-Rechner erstellen und anschließend das `scp`-Tool mit dem Parameter `-i` verwenden.
In unserem Fall wäre die Lösung:
scp -i key.pem somefile user@127.0.0.1:/home/user/somefile.txt
Hierbei ist `key.pem` die private Schlüsseldatei für den Benutzer 'user'.
Hinweis: Wir haben `127.0.0.1` nur beispielhaft als Remote-Host verwendet; in Ihrem Fall handelt es sich beim Remote-Host höchstwahrscheinlich um einen entfernten Rechner und nicht um Ihren lokalen Rechner.
Kommentare sind geschlossen.