web-dev-qa-db-fra.com

Transférer des fichiers entre deux serveurs SSH distants

Existe-t-il un moyen simple de transférer des fichiers entre deux serveurs SSH/SFTP? La solution parfaite serait FileZilla, mais elle vous permet uniquement de créer une connexion entre local et distant, mais pas entre distant et distant.

Théoriquement, je pourrais ouvrir deux fenêtres Nautilus et me connecter à certains ssh://server1/path/to/folder et ssh://server2/path/to/folder puis tirez les fichiers de l'un à l'autre. D'après mon expérience, c'est très instable. La transmission de fichiers d'une taille de 10 Mo par exemple n'est pas un problème, mais le transfert de 10 Go, par exemple, a souvent amené Nautilus à se suspendre et à y rester dans le besoin de ps -e | grep nautilus -> kill -9 <pid>. J'ai également testé la même chose avec Nemo et Caja. Bien que Nemo ait tendance à être plus stable que les deux autres, il n'est toujours pas parfait et se casse également de temps en temps. FileZilla est extrêmement stable, n'a jamais vraiment réussi à le casser, mais il n'est pas très flexible en raison du fait qu'il ne peut se connecter qu'à un seul serveur SSH.

Bien sûr, je pourrais également monter un dossier avec sshfs, mais c'est une sorte de solution gênante. Trop de travail préalable à effectuer pour exécuter un transfert simple.

Existe-t-il une application capable de gérer les transferts entre deux serveurs SSH sans interruption? Parfait serait quelque chose comme FileZilla, qui reprendra le travail si la connexion était interrompue.

21
Socrates

Si vous utilisez une version Ubuntu qui est toujours prise en charge, votre commande scp fournira la -3 commutateur qui permet de copier des fichiers de remote1 à remote2 via localhost:

me@local:~> scp -3 user1@remote1:/path/to/file1 user2@remote2:/path/to/file2

Vous pouvez également omettre le -3 switch, mais vous aurez alors besoin de la clé publique (id_rsa.pub) de user1@remote1 dans le fichier authorized_keys de user2@remote2:

me@local:~> scp user1@remote1:/path/to/file1 user2@remote2:/path/to/file2

scp puis sous le capot fait un ssh user1@remote1 d'abord et à partir de là scp /path/to/file1 user2@remote2:/path/to/file2. C'est pourquoi les informations d'identification doivent être distribuées différemment de -3 Solution.

En d'autres termes:

  • scp -3 remote1:file1 remote2:file2 transfère le fichier de remote1 à localhost puis de nouveau à remote2. Les données voyagent remote1 → localhost → remote2. Le localhost est le tiers dans ce scénario, donc -3. Pour que cela fonctionne, vous aurez besoin des informations d'identification de localhost sur les deux remote1 et remote2 parce que localhost se connecte aux deux.

  • scp remote1:file1 remote2:file2 copie le fichier directement depuis remote1 vers remote2 à la vitesse avec laquelle ils sont connectés les uns aux autres. localhost n'est pas impliqué ici (en plus d'émettre la commande). Les données voyagent remote1 → remote2. Pour que cela fonctionne, vous aurez besoin des informations d'identification de localhost uniquement sur remote1 but en outre, vous avez besoin des informations d'identification remote1 on remote2 parce que localhost se connecte à remote1 uniquement, puis remote1 se connecte à remote2.

Si possible, je choisirais la deuxième approche. Comme certains commentaires le disent déjà: d'habitude souvent le câble réseau entre remote1 et remote2 est beaucoup plus épais que le câble entre eux et localhost.

36
PerlDuck

Dans la plupart des cas, deux serveurs ssh peuvent se rejoindre (ou au moins l'un peut atteindre l'autre), et encore une fois dans la plupart des cas, Internet du poste de travail est bien pire que l'un des serveurs.

Si c'est le cas, commander un serveur à transférer sur l'autre est la voie à suivre.

ssh server1 Nohup scp somefile server2:somefile

Vérifier Nohup.out sur server1 pour les erreurs.

Si l'accessibilité du serveur est l'inverse, vous pouvez inverser la machine qui est le maître:

ssh server2 Nohup scp server1:somefile somefile
10
Joshua

Vous pouvez peut-être utiliser l'un des frontaux de l'interface graphique pour rsync:

Existe-t-il une application graphique pour la commande rsync?

Ou peut-être pourriez-vous utiliser rsync directement depuis la ligne de commande pour vous connecter aux deux serveurs distants:

"Comment synchroniser des fichiers entre deux télécommandes"

Je me connecte souvent à un serveur avec ssh, puis à partir de la ligne de commande de ce serveur tilisez rsync pour pousser ou tirer des fichiers vers l'autre serveur distant - c'est généralement beaucoup plus rapide que d'essayer de transférer les fichiers via un tiers ordinateur.

Le rsync est assez intelligent pour faire du travail, puis si quelque chose se passe mal et interrompt le processus, il peut plus tard reprendre là où il s'était arrêté.

7
David Cary

Vous devez utiliser le protocole SCP. scp file you want to transfer login@address_of_second_server:/path_where_you_want_to_save

0
Gravemind