J'essaie de pousser les modifications sur mon serveur via ssh sur windows (cygwin) en utilisant rsync
. La commande que j'utilise est:
rsync -rvz -e ssh/cygdrive/c/myfolder/[email protected]:/srv/www/prj112/myfolder /
/srv/www/prj112/myfolder/
appartient à rsyncuser
. Mon problème est que même si rsync
les sous-répertoires sont créés lors de leur publication, chaque répertoire se voit attribuer l'autorisation par défaut de d---------
donc rsync
ne parvient pas à copier les fichiers qu'il contient.
Comment puis-je réparer ça?
L'option d'ignorer les autorisations NTFS a changé dans Cygwin version 1.7. C'est peut-être ce qui cause le problème.
Essayez d'ajouter le drapeau 'noacl' à vos montages Cygwin dans C:\cygwin\etc\fstab, par exemple:
none /cygdrive cygdrive user,noacl,posix=0 0 0
Vous pouvez transmettre des autorisations personnalisées via rsync en utilisant l'option 'chmod':
rsync -rvz --chmod=ugo=rwX -e ssh source destination
si vous déployez un site à partir de Windows (par exemple, Octopress utilise rsync), il est possible de définir l'autorisation 775 en ajoutant plusieurs commandes chmod:
rsync -avz --chmod=ug=rwx --chmod=o=rx -e ssh
Votre problème vient du fait que les autorisations Unix sur ce répertoire sont vraiment 0. Toutes les informations d'accès sont stockées dans des ACL distinctes, que rsync ne copie pas. Ainsi, il définit les autorisations sur la copie distante à 0 et, évidemment, ne peut plus écrire dans ce répertoire par la suite. Tu peux courir
chmod -R 775
sur ce répertoire, ce qui devrait résoudre votre problème rsync.
Après avoir regardé la page de manuel, je peux dire que le paramètre chmod est disponible dans rsync depuis la version ~ 2.6.8. Mais vous devez utiliser --chmod=ugo=rwX
en combinaison avec rsync -av
Vous devriez également essayer cette commande:
rsync -av <SOURCE_DIR> [email protected]:/srv/www/prj112/myfolder
Cela fonctionnerait au moins sur Linux. Et notez que rsync n'a pas besoin de mentionner ssh - au moins sous Linux.
Mais si tout échoue et juste pour donner une option, vous pouvez jeter un œil à cet outil prêt à l'emploi cwRsync
Pour rsync de Windows vers Unix/Linux, vous devez fournir une commande comme
SET BACKUP_SERVER=my.backup.server
SET SSH_USER=theUnixUserName
SET STORAGEPATH=/home/%SSH_USER%/Backup/
SET STORAGEURI=%BACKUP_SERVER%:%STORAGEPATH%
SET SSH_ID=/cygdrive/c/Users/theWindowsUserName/Documents/keyfiles/id_dsa
SET EXCLUDEFILE=backup_excludes.txt
SET BACKUPLOGFILE=/cygdrive/c/Users/theWindowsUserName/Backuplogs/backup-%DATE%-%TIME::=-%.log
La commande ssh est alors
SET BACKUP=rsync -azvu --chmod=Du=rwx,Dgo=rx,Fu=rw,Fgo=r --rsh="ssh -l %SSH_USER% -i '%SSH_ID%'" --exclude-from=%EXCLUDEFILE% --delete --delete-excluded --log-file="%BACKUPLOGFILE%"
avec backup_excludes.txt contenant des lignes d'éléments ignorés comme
.git
.svn
.o
\Debug
\Release
Ensuite, vous utiliseriez cela dans un script avec
%BACKUP% /cygdrive/c/mySensibleData %STORAGEURI%
%BACKUP% /cygdrive/c/myOtherSensibleData %STORAGEURI%
%BACKUP% /cygdrive/c/myOtherSensibleData2 %STORAGEURI%
etc. Cela sauvegardera vos répertoires mySensibleData, myOtherSensibleData et myOtherSensibleData2 avec les autorisations 755 pour les répertoires et 644 pour les fichiers. Vous obtenez également des journaux de sauvegarde dans votre % BACKUPLOGFILE% pour chaque sauvegarde.
Cygwin rsync signalera l'autorisation refusée lorsqu'un processus a ouvert le fichier cible. Téléchargez et exécutez Process Explorer et découvrez si quelque chose d'autre verrouille le fichier ou essayez simplement de renommer le fichier et voyez si vous obtenez l'erreur Windows sur un autre processus ayant le fichier ouvert.
Vous pouvez également essayer de créer une variable d'environnement (globale) CYGWIN
et définir sa valeur sur nontsec