1 votes

Rsync rend le dossier de destination non inscriptible avant de copier des fichiers dedans (et donc bien sûr cela échoue avec Permission refusée)

Je veux utiliser rsync pour déployer un projet depuis ma machine de développement (Windows 11, CygWin) vers un serveur distant (Ubuntu) via SSH. J'ai vérifié que mon utilisateur SSH ait un accès en écriture complet au dossier de destination en exécutant les commandes ci-dessous :

root# mkdir /opt/my-project
root# chmod +rwx /opt/my-project
root# cwown -R ubuntu /opt/my-project
ubuntu$ touch /opt/my-project/test && rm /opt/my-project   # Aucune erreur

Sur ma machine Windows, j'utilise la commande rsync suivante :

C:\cygwin64\bin\rsync.exe -Pav \
    -e "C:/cygwin64/bin/ssh.exe -i " \
    ./bin/Release/net6.0/linux-x64/publish/ ubuntu@my_server:/opt/my-project/

Je m'attends à ce que cette commande démarre une synchronisation de fichiers incrémentielle, et télécharge tous les fichiers manquants dans le dossier du projet sur le serveur. Mais au lieu de cela, l'outil rsync renvoie une série d'erreurs Permission denied (13) et échoue à copier un seul fichier. De plus, lorsque je retourne sur le serveur pour vérifier le dossier cible, l'utilisateur ubuntu n'a plus aucun type d'accès. Même lister le dossier (ls /opt/my-project) renvoie une erreur de Permission denied.

Ce comportement est très étrange, car avant le téléversement, l'utilisateur ubuntu a définitivement un accès en écriture complet au dossier cible, mais il semble que rsync se verrouille intentionnellement hors du dossier avant de transférer un seul fichier.

Voici la sortie abrégée de la commande rsync :

envoi de la liste des fichiers incrémentiels
rsync: échec de la modification des autorisations sur "/opt/my-project/.": Permission denied (13)
rsync: recv_generator: échec de la statistique de "/opt/my-project/file1.so": Permission denied (13)
rsync: recv_generator: échec de la statistique de "/opt/my-project/file2.so": Permission denied (13)
...
rsync: recv_generator: mkdir "/opt/my-project/file420.so" a échoué : Permission denied (13)
*** Ignorer tout contenu de ce répertoire échoué ***
...
envoyé 71,147 octets  reçus 53,278 octets  49,770.00 octets/sec
la taille totale est de 314,634,345  la vitesse est de 2,528.71
erreur rsync : certains fichiers/attributs n'ont pas été transférés (voir les erreurs précédentes) (code 23) à main.c(1330) [sender=3.2.4dev]

Qu'est-ce qui cause ce comportement ?

Versions de Rsync et des systèmes d'exploitation :

  • Local : Windows 11, CygWin/rsync version 3.2.4dev version de protocole 31
  • À distance : Ubuntu 20.04, rsync version 3.1.3 version de protocole 31

1voto

Tom Points 21

Pour une raison quelconque, le rsync par défaut qui vient avec CygWin ne semble pas être compatible avec les systèmes de fichiers Linux distants. La solution a été d'installer rsync à partir d'ici : https://github.com/Bill-Stewart/CygSSH

En utilisant ceci, tout fonctionne comme prévu.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X