SCP Autorisation Refusée : Qu'est-ce qui le cause ? Comment le réparer ?

Découvrez comment résoudre l'erreur "permission denied" lors de l'utilisation de SCP pour transférer des fichiers via SSH, en explorant les causes et les solutions efficaces.
SCP est un utilitaire de transfert de fichiers SSH ouvert que vous pouvez utiliser sur Linux et d'autres systèmes d'exploitation pris en charge pour transférer des fichiers via SSH. Il peut être utilisé pour transférer des fichiers entre deux hôtes en utilisant une connexion SSH.
L'erreur ‘permission denied’ de SCP peut survenir pour diverses raisons, telles que des chemins spécifiés de manière incorrecte ou une erreur de permission d'écriture. Nous allons explorer certaines des raisons pour lesquelles cette erreur se produit et comment la résoudre.
Cause : Ne pas avoir de permissions d'écriture
Une raison pour laquelle cette erreur se produit est que votre utilisateur n'a pas les permissions d'écriture pour le répertoire spécifique sur l'hôte où vous essayez d'écrire des fichiers. Pour vérifier ces permissions, vous pouvez utiliser la commande ‘ls -l’, qui affichera les permissions d'écriture.
Recherchez un ‘w’ dans les quatre premiers caractères de la première colonne de la sortie. Si vous en voyez un, cela signifie que votre utilisateur a la permission d'écriture pour ce répertoire. Alternativement, vous pouvez toujours créer un fichier en utilisant la commande touch dans ce répertoire. Si vous ne recevez pas d'erreurs, telles que ‘permission denied’, alors cela signifie que votre utilisateur a les permissions d'écriture.
Exemple :
Disons que vous souhaitez copier un fichier vers un hôte distant en utilisant SCP, et que vous recevez une permission refusée en raison des permissions d'écriture.
scp abcd.txt user@127.0.0.1:/home/abcduser/abcd.txt
Solution 1 : Utiliser le compte root pour transférer des fichiers
Pour corriger cette erreur, vous devez accorder des permissions d'écriture à votre utilisateur pour ce répertoire. Pour cela, vous avez besoin de privilèges root ou sudo. Une autre chose que vous pouvez faire est de copier le fichier dans un répertoire où votre utilisateur a des permissions d'écriture.
Dans un tel scénario, vous devez soit accorder à votre utilisateur actuel les permissions d'écriture sur /home/abcduser, soit utiliser le compte utilisateur root pour copier ce fichier.
Pour permettre à l'utilisateur root de copier un fichier en utilisant scp, vous devez autoriser la connexion root sur ssh, ce qui n'est pas recommandé pour des raisons de sécurité, mais vous pouvez l'utiliser de toute façon dans de tels scénarios et le désactiver ensuite.
Pour ce faire, ouvrez le fichier de configuration openssh à /etc/ssh/sshd_config et décommentez PermitRootLogin dans un éditeur de texte sur l'hôte distant.
Ensuite, connectez-vous à l'hôte distant en utilisant le compte root.
Ensuite, exécutez la commande comme suit :
scp abcd.txt root@127.0.0.1:/abcduser/abcd.txt
Ou simplement cela suffira :
scp abcd.txt 127.0.0.1:/abcduser/abcd.txt
Car les deux sont identiques.
Solution 2 : Ajouter votre utilisateur au groupe des permissions d'écriture
Pour permettre à un utilisateur d'écrire dans un répertoire/fichier sous linux, vous devez soit ajouter un utilisateur au groupe qui possède le répertoire ou le fichier, soit faire en sorte que le fichier soit possédé par cet utilisateur.
Dans notre exemple, nous exécutons ls -l sur le répertoire /home/ du système distant pour voir quel groupe possède /home/abcd.
La commande ls -l vous donnera une sortie, où le contenu de la 4ème colonne est le groupe qui possède un répertoire/fichier correspondant.
Dans notre exemple, c'est le groupe abcduser qui possède le répertoire /home/abcduser, alors nous pouvons
Tout simplement exécuter cette commande sur le système distant.
sudo groupadd user abcd
C'est le ‘groupe abcd’ dont nous voulons que notre utilisateur fasse partie et l'utilisateur dont nous voulons changer le groupe est ‘user’.
Exécutez à nouveau la commande ls -l et si vous voyez un ‘w’ à la 6ème position de la sortie dans la première colonne, cela signifie que le groupe a des permissions d'écriture sur ce répertoire.
Puis réexécutez la commande, qui dans notre cas serait :
scp abcd.txt user@somepc:/home/abcduser/abcd.txt
Solution 3 : Utiliser l'utilisateur qui possède ce répertoire pour copier le fichier
La solution la plus simple est d'utiliser l'utilisateur qui possède ce répertoire pour copier le fichier à l'intérieur.
Il suffit d'exécuter ls -l sur le répertoire. Dans notre cas, ce serait :
ls -l /home/
La sortie de la troisième colonne sera l'utilisateur qui possède ce répertoire correspondant au nom du répertoire qui vous intéresse. Dans notre cas, c'est abcduser qui possède le répertoire /home/abcduser, comme on peut le voir dans la capture d'écran ci-dessus.
Ensuite, utilisez ce compte particulier pour copier le fichier en utilisant scp vers l'hôte distant.
Dans notre cas, nous exécutons la commande comme suit :
scp abcd.txt abcduser@127.0.0.1:/home/abcduser/abcd.txt
Cause 2 : Ne pas avoir une clé privée pour cet utilisateur
l'hôte distant
Vous pourriez rencontrer une erreur indiquant que le scp a refusé l'autorisation (clé publique) lorsque vous essayez de transférer des fichiers entre des hôtes.
C'est un problème d'authentification de ssh et la raison en est que vous n'avez pas ajouté de clé privée à scp lors de son exécution.
Exemple :
scp somefile user@127.0.0.1:/home/user/somefile.txt
Solution :
Une solution simple consiste à exécuter la commande scp avec le drapeau -i, ajoutant ainsi la clé privée pour cet utilisateur avec lequel vous souhaitez vous connecter à l'hôte distant et transférer des fichiers.
Vous devez vous assurer que vous avez la clé privée pour cet utilisateur et si ce n'est pas le cas, vous devez la générer sur la machine distante, puis faire utiliser scp avec le drapeau -i.
Dans notre cas, la solution serait :
scp -i key.pem somefile user@127.0.0.1:/home/user/somefile.txt
Où key.pem est le fichier de clé privée pour l'utilisateur ‘user’.
Remarque : Nous avons utilisé 127.0.0.1 comme hôte distant juste à titre d'exemple, dans votre cas, l'hôte distant serait probablement une machine distante et non votre localhost.
Questions et réponses que vous devez connaître
Pourquoi la commande SCP ne fonctionne pas ?
- Problème de .bashrc : Si le fichier
.bashrc
de l'utilisateur ne permet pas les connexions non interactives, des commandes s'exécutent lors de la tentative de connexion en SSH.- -
Commandes perturbatrices
- : Les commandes présentes dans
.bashrc
- , comme celles qui exécutent des échos, peuvent brouiller la sortie de SCP, rendant la connexion inopérante.
- Solution :
- Modifiez votre
.bashrc
pour éviter les échos ou autres commandes qui perturbent les sessions non interactives. - Vérifiez également que le serveur SSH est bien configuré pour accepter les connexions SCP sans interférence.
- Diagnostic : Pour identifier le problème, essayez de vous connecter via SSH et observez les messages ou la sortie qu’ils produisent. Ce retour peut indiquer où se situe le souci.
Quelles autorisations sont nécessaires pour SCP ?
Pour utiliser la commande scp
, les autorisations suivantes sont nécessaires :
- -
Authentification
- : Vous devez posséder un compte sur le système cible ou avoir une clé publique autorisée.
- Droits d'accès :
- Sur le système source : droits de lecture sur les fichiers que vous souhaitez transférer.
- Sur le système cible : droits d'écriture pour y déposer les fichiers. En résumé, assurez-vous d'avoir les bonnes autorisations d'accès et d'authentification avant d'utiliser
scp
pour un transfert de fichiers réussi.
Maintenant que tu as fini de lire SCP Autorisation Refusée : Qu'est-ce qui le cause ? Comment le réparer ?, nous t'invitons à explorer davantage la catégorie Linux. Tu y trouveras d'autres articles intéressants qui élargiront tes connaissances et te tiendront informé. Ne cesse pas de lire et de découvrir plus!
Laisser un commentaire