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