web-dev-qa-db-fra.com

Serveur Linux distant vers copie du répertoire du serveur Linux distant. Comment?

Quelle est la meilleure façon de copier un répertoire (avec des sous-répertoires et des fichiers) d'un serveur Linux distant vers un autre serveur Linux distant? Je me suis connecté aux deux en utilisant le client SSH (comme PuTTY). J'ai un accès root aux deux.

43
Arun Agrawal

Il y a deux façons de le faire, les deux utilisent ssh:

scp -r sourcedir/ [email protected]:/dest/dir/

ou, la méthode la plus robuste et la plus rapide (en termes de vitesse de transfert):

rsync -auv -e ssh --progress sourcedir/ [email protected]:/dest/dir/

Lisez les pages de manuel de chaque commande si vous souhaitez plus de détails sur leur fonctionnement.

62
Ycros

Je modifierais une réponse suggérée précédemment:

rsync -avlzp /path/to/sfolder [email protected]:/path/to/remote/dfolder

comme suit:

-a (pour l'archive) implique -rlptgoD donc les l et p ci-dessus sont superflus. J'aime également inclure -H, qui copie les liens durs. Il ne fait pas partie de -a par défaut car il coûte cher. Alors maintenant, nous avons ceci:

rsync -aHvz /path/to/sfolder [email protected]:/path/to/remote/dfolder

Vous devez également faire attention aux barres obliques de fin. Tu veux probablement

rsync -aHvz /path/to/sfolder/ [email protected]:/path/to/remote/dfolder

si le souhait est que le contenu de la source "sfolder" apparaisse dans la destination "dfolder". Sans la barre oblique de fin, un sous-répertoire "sfolder" serait créé dans la destination "dfolder".

32
user19218

rsync -avlzp/chemin/vers/dossier [email protected]:/chemin/vers/dossier/distant

9
Ana Betts
scp -r <directory> <username>@<targethost>:<targetdir>
6
Cody Brocious

Connectez-vous à une machine

$ scp -r/chemin/vers/haut/répertoire utilisateur @ serveur:/chemin/vers/copie

5
Flame

Essayez à l'unisson si la tâche est récurrente. http://www.cis.upenn.edu/~bcpierce/unison/

3
user11104

Découvrez scp ou rsync , man scpman rsync

scp file1 file2 dir3 user@remotehost:path
2
John Douthat

Utilisez rsync afin de pouvoir continuer si la connexion est interrompue. Et si quelque chose change, vous pouvez aussi les copier beaucoup plus rapidement!

Rsync fonctionne avec SSH afin que votre opération de copie soit sécurisée.

2
Ady Romantika

J'ai utilisé rdiffbackup http://www.nongnu.org/rdiff-backup/index.html car il fait tout ce dont vous avez besoin sans aucune option sophistiquée. Il est basé sur l'algorithme rsync. Si vous n'avez besoin de copier qu'une seule fois, vous pouvez ultérieurement supprimer le répertoire rdiff-backup-data sur l'hôte de destination.

rdiff-backup user1@Host1::/source-dir user2@Host2::/dest-dir

du doc:

rdiff-backup préserve également les sous-répertoires, les liens durs, les fichiers de développement, les autorisations, la propriété uid/gid, les heures de modification, les attributs étendus, les acls et les fourchettes de ressources.

ce qui est un bonus pour les propositions scp -p car l'option -p ne préserve pas tout (par exemple, les droits sur les répertoires sont mal définis)

installer sur ubuntu:

Sudo apt-get install rdiff-backup
2
Gunstick

scp fera le travail, mais il y a une ride: la connexion à la deuxième destination distante utilisera la configuration sur la première destination distante, donc si vous utilisez .ssh/config sur l'environnement local, et que vous vous attendez à ce que les clés rsa et dsa Pour travailler, vous devez transmettre votre agent au premier hôte distant.

1
Justin Dossey

Eh bien, une réponse rapide serait de jeter un œil à la page de manuel 'scp', ou peut-être à rsync - selon exactement ce que vous devez copier. Si vous le deviez, vous pourriez même faire tar-over-ssh:

tar cvf - | ssh server tar xf -
1
zigdon

Je pense que vous pouvez essayer avec:

rsync -azvu -e ssh user@Host1:/directory/ user@Host2:/directory2/

(et je suppose que vous êtes sur Host0 et que vous souhaitez copier directement de Host1 vers Host2)

Si ce qui précède ne fonctionne pas, vous pouvez essayer:

ssh user@Host1 "/usr/bin/rsync -azvu -e ssh /directory/ user@Host2:/directory2/"

dans ce cas, cela fonctionnerait, si vous avez déjà configuré la connexion SSH sans mot de passe de Host1 à Host2

1
Ram Prasad

En tant qu'utilisateur non root, idéalement:

scp -r src $ Host: $ chemin

Si vous avez déjà une partie du contenu sur $ Host, envisagez d'utiliser rsync avec ssh comme tunnel.

/ Allan

0
Allan Wind

Si vous voulez vraiment une copie exacte, vous pouvez également utiliser le commutateur -p pour scp, si vous l'utilisez. J'ai trouvé que scp lit sur les appareils, et j'ai eu des problèmes avec cpio, donc j'utilise toujours tar , comme ça:

cd /Origin; find . -xdev -depth -not -path ./lost+found -print0 \
| tar --create --atime-preserve=system --null --files-from=- --format=posix \
--no-recursion --sparse | ssh targethost 'cd /target; tar --extract \
--overwrite --preserve-permissions --sparse'

Je garde cette incantation dans un fichier avec divers autres moyens de copier des fichiers. Celui-ci est destiné à la copie via SSH; les autres sont destinés à la copie dans une archive compressée, à la copie sur le même ordinateur et à la copie sur une socket non chiffrée TCP lorsque SSH est trop lent.

0
Teddy

scp comme mentionné ci-dessus est généralement le meilleur moyen, mais n'oubliez pas deux-points dans les spécifications du répertoire distant sinon vous obtiendrez une copie du répertoire source sur la machine locale.

0
Sergey Stolyarov

J'aime faire passer du goudron dans ssh.

tar cf - [répertoire] | ssh [nom d'utilisateur] @ [nom d'hôte] tar xf - -C [destination sur la boîte distante]

Cette méthode vous offre de nombreuses options. Étant donné que root ssh doit être désactivé, la copie de fichiers pour plusieurs comptes d'utilisateurs est difficile car vous vous connectez au serveur distant en tant qu'utilisateur normal. Pour contourner ce problème, vous pouvez créer un fichier tar sur la boîte distante qui contient toujours et conserve la propriété.

tar cf - [répertoire] | ssh [nom d'utilisateur] @ [nom d'hôte] "cat> output.tar"

Pour les connexions lentes, vous pouvez ajouter une compression, z pour gzip ou j pour bzip2.

tar cjf - [répertoire] | ssh [nom d'utilisateur] @ [nom d'hôte] "cat> output.tar.bz2"

tar czf - [répertoire] | ssh [nom d'utilisateur] @ [nom d'hôte] "cat> output.tar.gz"

tar czf - [répertoire] | ssh [nom d'utilisateur] @ [nom d'hôte] tar xzf - -C [destination sur la boîte distante]

0
Chuck