SCP-toegang geweigerd: waarom gebeurt dit en hoe los je het op?

SCP is een open-source tool voor het overdragen van bestanden via SSH. Je kunt het gebruiken op Linux en andere ondersteunde besturingssystemen om bestanden via SSH over te dragen. Het kan worden gebruikt om bestanden over te dragen tussen twee hosts met behulp van een SSH-verbinding.

Een "toegang geweigerd"-fout in SCP kan verschillende oorzaken hebben , zoals onjuist gedefinieerde paden of een schrijfrechtenfout . We zullen enkele oorzaken van deze fout onderzoeken en hoe u deze kunt oplossen.

Reden: Geen schrijfrechten

Een mogelijke oorzaak van deze fout is dat uw gebruiker geen schrijfrechten heeft voor de opgegeven map op de host waar u de bestanden probeert te schrijven. Om deze rechten te controleren, kunt u de opdracht 'ls -l' gebruiken . Deze opdracht toont de schrijfrechten.

Zoek naar de letter 'w' tussen de eerste vier tekens in de eerste kolom van de uitvoer. Als je die ziet, heeft je gebruiker schrijfrechten voor die map. Je kunt ook altijd een bestand aanmaken met het commando `touch` in die map. Als je geen foutmeldingen krijgt, zoals 'toegang geweigerd', heeft je gebruiker schrijfrechten.

Voorbeeld:

Stel, u wilt een bestand kopiëren naar een externe host met SCP en u krijgt een foutmelding "toegang geweigerd" vanwege onvoldoende schrijfrechten.

scp abcd.txt user@127.0.0.1:/home/abcduser/abcd.txt

Oplossing 1: Gebruik het root-account om bestanden over te dragen.

Om deze fout te verhelpen, moet u uw gebruiker schrijfrechten geven voor die map. Hiervoor hebt u root- of sudo-rechten nodig. Een andere mogelijkheid is om het bestand te kopiëren naar een map waar uw gebruiker wel schrijfrechten heeft.

In zo'n geval moet u de huidige gebruiker schrijfrechten geven voor /home/abcduser, of u kunt het root-gebruikersaccount gebruiken om dit bestand te kopiëren.

Om een ​​rootgebruiker een bestand te laten kopiëren met scp, moet je root-toegang via ssh toestaan. Dit wordt om veiligheidsredenen afgeraden, maar je kunt het in dergelijke gevallen toch gebruiken en daarna weer uitschakelen.

Om dit te doen, opent u het openssh-configuratiebestand in /etc/ssh/sshd_config en verwijdert u het commentaarteken voor PermitRootLogin in een teksteditor op de externe host.

Maak vervolgens verbinding met de externe host via het root-account.

Voer vervolgens de opdracht als volgt uit:

scp abcd.txt root@127.0.0.1:/abcduser/abcd.txt

Of simpelweg: dit werkt ook.

scp abcd.txt 127.0.0.1:/abcduser/abcd.txt

Omdat ze identiek zijn.

Oplossing 2: Voeg uw gebruiker toe aan de groep met schrijfrechten:

Om een ​​gebruiker schrijfrechten te geven in een map of bestand in Linux, moet je de gebruiker toevoegen aan de groep die eigenaar is van de map of het bestand, of het bestand aan die gebruiker toewijzen.

In ons voorbeeld voeren we `ls -l` uit op de map `/home/` op het externe systeem om te achterhalen welke groep eigenaar is van `/home/abcd`.

Het commando `ls -l` geeft een uitvoer weer, waarbij de inhoud van de vierde kolom de groep aangeeft die eigenaar is van de betreffende map/het betreffende bestand.

In ons voorbeeld is de groep `abcduser` eigenaar van de map `/home/abcduser`, en daarom kunnen we

Voer dit commando eenvoudigweg uit op het externe systeem.

sudo groupadd user abcd

Het is de groep 'abcd' waar we onze gebruiker lid van willen laten zijn, en de gebruiker wiens groep we willen wijzigen is 'user'.

Voer de opdracht `ls -l` opnieuw uit. Als je de letter 'w' op de zesde positie in de eerste kolom van de uitvoer ziet, betekent dit dat de groep schrijfrechten heeft voor deze map.

Voer vervolgens de opdracht opnieuw uit, die in ons geval als volgt luidt:

scp abcd.txt user@somepc:/home/abcduser/abcd.txt

Oplossing 3: Gebruik de gebruiker die eigenaar is van deze map om het bestand te kopiëren.

De eenvoudigste oplossing is dat de gebruiker die eigenaar is van deze map het bestand ernaartoe kopieert.

Voer simpelweg `ls -l` uit in de betreffende map. In ons geval zal dat zijn:

ls -l /home/

De uitvoer van de derde kolom is de gebruiker die eigenaar is van de map die overeenkomt met de mapnaam waarin u geïnteresseerd bent. In ons geval is `abcduser` eigenaar van de map `/home/abcduser`, zoals te zien is in de bovenstaande schermafbeelding.

Gebruik vervolgens dit specifieke account bij het kopiëren van het bestand met `scp` naar de externe host.
In ons geval voeren we het commando als volgt uit:

scp abcd.txt abcduser@127.0.0.1:/home/abcduser/abcd.txt

Reden 2: De externe host beschikt niet over een privésleutel voor die gebruiker.

U kunt een foutmelding krijgen met de tekst "scp permission denied" (public key) wanneer u bestanden probeert over te dragen tussen hosts.

Dit is een authenticatieprobleem voor `ssh` en de reden hiervoor is dat u geen privésleutel aan `scp` hebt toegevoegd terwijl het actief was.

Voorbeeld:

scp somefile user@127.0.0.1:/home/user/somefile.txt

الحل:

De eenvoudigste oplossing hiervoor is om het `scp`-commando uit te voeren met de `-i`-vlag , waarmee je de privésleutel toevoegt van de gebruiker waarmee je verbinding wilt maken met de externe host en bestanden wilt overdragen.

Je moet ervoor zorgen dat je de privésleutel van die gebruiker hebt. Als je die niet hebt, moet je die op de externe machine aanmaken en vervolgens het `scp`-programma die sleutel laten gebruiken met de `-i`-tag.

In ons geval zou de oplossing zijn:

scp -i key.pem somefile user@127.0.0.1:/home/user/somefile.txt

Waarbij `key.pem` het privé-sleutelbestand is voor de gebruiker 'user'.

Let op: We hebben `127.0.0.1` als externe host gebruikt, puur als voorbeeld. In uw geval is de externe host waarschijnlijk een externe machine en niet uw lokale machine.

 

Reacties zijn gesloten.