Refus d'accès à SCP : Pourquoi cela se produit et comment y remédier
SCP est un outil open source permettant le transfert de fichiers via SSH. Il est compatible avec Linux et d'autres systèmes d'exploitation prenant en charge le transfert de fichiers entre deux hôtes utilisant une connexion SSH.

Une erreur « Permission refusée » dans SCP peut survenir pour plusieurs raisons, comme des chemins d'accès mal définis ou une erreur d'autorisation d'écriture . Nous allons examiner certaines des causes de cette erreur et comment la résoudre.
Motif : Absence d'autorisations d'écriture
L'une des raisons de cette erreur est que votre utilisateur ne dispose pas des droits d'écriture sur le répertoire spécifié, sur le système hôte où vous tentez d'écrire les fichiers. Pour vérifier ces droits, vous pouvez utiliser la commande « ls -l » , qui affichera les autorisations d'écriture.

Recherchez la lettre « w » parmi les quatre premiers caractères de la première colonne du résultat. Si vous la trouvez, votre utilisateur dispose des droits d'écriture sur ce répertoire. Vous pouvez également créer un fichier dans ce répertoire à l'aide de la commande `touch`. Si vous ne recevez aucune erreur, telle que « Permission refusée », votre utilisateur dispose bien des droits d'écriture.
Par exemple:
Supposons que vous souhaitiez copier un fichier vers un hôte distant à l'aide de SCP et que vous receviez une erreur « autorisation refusée » en raison d'un problème d'autorisations d'écriture.
scp abcd.txt utilisateur@127.0.0.1:/home/abcduser/abcd.txt
Solution 1 : Utiliser le compte root pour transférer les fichiers
Pour corriger cette erreur, vous devez accorder à votre utilisateur les droits d'écriture sur ce répertoire. Pour cela, vous devez disposer des privilèges root ou sudo. Vous pouvez également copier le fichier dans un répertoire où votre utilisateur possède les droits d'écriture.
Dans ce cas, vous devez soit accorder à l'utilisateur actuel les droits d'écriture sur /home/abcduser, soit utiliser le compte utilisateur root pour copier ce fichier.
Pour permettre à un utilisateur root de copier un fichier à l'aide de scp, il est nécessaire d'autoriser la connexion root via ssh, ce qui n'est pas recommandé pour des raisons de sécurité, mais vous pouvez néanmoins l'utiliser dans de tels scénarios et la désactiver par la suite.
Pour ce faire, ouvrez le fichier de configuration openssh dans /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 son compte root.
Exécutez ensuite la commande comme suit :
scp abcd.txt root@127.0.0.1:/abcduser/abcd.txt
Ou tout simplement, ceci fera l'affaire.
scp abcd.txt 127.0.0.1:/abcduser/abcd.txt
Parce qu'ils sont identiques.
Solution 2 : Ajoutez votre utilisateur au groupe disposant des autorisations d’écriture :
Pour qu'un utilisateur puisse écrire dans un répertoire/fichier sous Linux, il faut soit ajouter l'utilisateur au groupe propriétaire du répertoire ou du fichier, soit faire en sorte que le fichier appartienne à cet utilisateur.
Dans notre exemple, nous exécutons la commande ls -l sur le répertoire /home/ du système distant pour déterminer quel groupe est propriétaire de /home/abcd.
La commande `ls -l` vous donnera un résultat, où le contenu de la quatrième colonne est le groupe qui possède le répertoire/fichier correspondant.

Dans notre exemple, le groupe `abcduser` est propriétaire du répertoire `/home/abcduser`, et nous pouvons donc
Il suffit d'exécuter cette commande sur le système distant.
sudo groupadd utilisateur abcd
C'est le groupe « abcd » auquel nous voulons que notre utilisateur appartienne, et l'utilisateur dont nous voulons modifier le groupe est « user ».
Exécutez à nouveau la commande `ls -l`, et si vous voyez la lettre 'w' en sixième position dans la première colonne du résultat, cela signifie que le groupe dispose des droits d'écriture sur ce répertoire.
Exécutez ensuite à nouveau la commande, qui dans notre cas sera :
scp abcd.txt utilisateur@somepc:/home/abcduser/abcd.txt
Solution 3 : Utilisez l’utilisateur propriétaire de ce répertoire pour copier le fichier.
La solution la plus simple consiste à ce que l'utilisateur propriétaire de ce répertoire y copie le fichier.
Il suffit d'exécuter la commande `ls -l` sur le répertoire. Dans notre cas, cela donnera :
ls -l /home/

La troisième colonne affichera l'utilisateur propriétaire du répertoire correspondant au nom de répertoire recherché. Dans notre exemple, `abcduser` est propriétaire du répertoire `/home/abcduser`, comme illustré dans la capture d'écran ci-dessus.
Utilisez ensuite ce compte spécifique lors de la copie du fichier à l'aide de `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
Raison 2 : L’hôte distant ne possède pas de clé privée pour cet utilisateur.
Vous pouvez recevoir une erreur indiquant « autorisation scp refusée » (clé publique) lors de la tentative de transfert de fichiers entre hôtes.
Il s'agit d'un problème d'authentification pour `ssh` et la raison en est que vous n'avez pas ajouté de clé privée à `scp` pendant son exécution.
Par exemple:
scp somefile user@127.0.0.1:/home/user/somefile.txt
Solution:
La solution la plus simple consiste à exécuter la commande `scp` avec l'option `-i` , ajoutant ainsi la clé privée de l'utilisateur auquel vous souhaitez vous connecter à l'hôte distant et transférer des fichiers.
Vous devez vous assurer de disposer de la clé privée de cet utilisateur. Si vous ne l'avez pas, vous devez la créer sur la machine distante, puis configurer l'outil `scp` pour qu'il l'utilise avec l'option `-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 de l'utilisateur 'user'.
Remarque : nous avons utilisé `127.0.0.1` comme hôte distant uniquement à titre d’exemple ; dans votre cas, l’hôte distant sera plus probablement une machine distante et non votre machine locale.
Les commentaires sont fermés.