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.

zou kunnen gebeuren "toegang geweigerd" foutmelding In SCP om verschillende redenen, zoals Onjuist gedefinieerde routes أو Fout bij het schrijven van de toestemmingWe zullen enkele oorzaken van deze fout onderzoeken en bekijken hoe deze te verhelpen is.

Reden: Geen schrijfrechten

Een van de redenen waarom deze fout optreedt, is dat Uw gebruiker heeft geen schrijfrechten. Voor de specifieke map op de host waar u de bestanden probeert te schrijven. Om deze machtigingen te controleren, kunt u Met behulp van het commando 'ls -l'Hierdoor worden de schrijfrechten weergegeven.

Zoek naar de letter 'w'. Binnen de eerste vier tekens in de eerste kolom van de uitvoer. Als je ze ziet, betekent dit dat Uw gebruiker heeft schrijfrechten. Daarom de map. Als alternatief kun je altijd een bestand aanmaken met het commando `touch` in die map. Als je geen foutmeldingen krijgt, zoals 'toegang geweigerd', betekent dit dat je gebruiker schrijfrechten heeft.

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 een ​​dergelijke fout te herstellen, Je moet schrijfrechten verlenen. Om als gebruiker toegang te krijgen tot die map, heeft u root- of sudo-rechten nodig. Een andere mogelijkheid is om het bestand te kopiëren naar een map waar uw gebruiker 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 OpenSH-configuratiebestand bevindt zich op /etc/ssh/sshd_config وVerwijder de opmerking over 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' De groep waar we onze gebruiker bij willen plaatsen, en de gebruiker wiens groep we willen wijzigen, is 'gebruiker'.

Voer de opdracht `ls -l` opnieuw uit, en als Ik zag de letter 'w' op de zesde positie. De waarde in de eerste kolom betekent 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 eenvoudige oplossing daarvoor is Het `scp`-commando uitvoeren met de vlag `-i`Voeg daarom de privésleutel toe van de gebruiker waarmee u 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'.

ملاحظة: We hebben gebruikt `127.0.0.1` Als we het bijvoorbeeld over een externe host hebben, dan is die in uw geval hoogstwaarschijnlijk een extern apparaat en niet uw lokale apparaat.

 

Reacties zijn gesloten.