Récupérez les fichiers du serveur à deux pas [fermé]

14

Nous avons la situation suivante:

  1. Ma machine
  2. Une machine passerelle
  3. La machine cible

Je n'ai aucun droit root sur # 2 et # 3. Je ne peux pas non plus vraiment stocker d'informations (pas plus de 200 Mio) sur la machine n ° 2 (car c'est ment pour être une passerelle vers le reste du réseau, pas plus que ça). Sur la machine n ° 3, il y a un dossier, d'environ 3 Gio, que je veux copier sur local. Je ne peux pas SSH de # 1 à # 3, mais je peux SSH à # 2 puis à # 3. Il n'est pas non plus possible de configurer une paire de clés publique privée entre # 2 et # 3, mais une paire de clés est installée entre # 1 et # 2.

Normalement, j'utilise la combinaison de SSH et tar pour y parvenir:

ssh name@host "tar cf - folder" > folder.tar

Mais dans ce cas, cela nécessiterait une sorte d'imbrication, et je n'arrive pas à faire cela.

Alors, quelle serait une bonne façon d'obtenir les données de # 3 à # 1?

Cheiron
la source

Réponses:

27

Vous pouvez créer un tunnel SSH via machine2 puis dans une autre session vous connecter au tunnel.

Par exemple, ouvrez deux sessions CLI sur machine1. Dans la première session, exécutez ce qui suit:

MACHINE1$ ssh -L 2022:MACHINE3:22 <user>@MACHINE2

Dans la deuxième session, exécutez ce qui suit:

MACHINE1 $ ssh -p 2022 <user>@localhost

Ce qui se passe avec la première commande est qu'un port local (2022 sur machine1) est tunnelé vers le port 22 sur machine3 en utilisant votre connexion SSH à machine2.

Avec la deuxième commande, vous vous connectez au port local nouvellement ouvert (2022) et c'est comme si vous vous connectiez directement à machine3.

Maintenant, si vous souhaitez utiliser votre processus de transfert de fichiers typique, vous pouvez procéder comme suit:

ssh -p 2022 <user>@localhost "tar cf - /path/to/remote/directory/" > filename.tar

Alternativement, vous pouvez vous familiariser avec rsync et faire quelque chose comme ceci à la place:

rsync -aHSv --progress -e 'ssh -p 2022' <user>@localhost:/path/to/remote/directory/ /path/to/local/directory/

En supposant que l'objectif final n'est pas d'obtenir une tarball.

Gène
la source
2
L'utilisation de ProxyCommandet ssh -Wles deux sshcommandes peuvent être combinées en une seule ligne de commande. Si vous avez une version très récente du client OpenSSH, il y a un argument qui vous permettra de tout faire avec une seule sshcommande.
kasperd
+1 pour rsync;)
NieDzejkob
J'utilise tar car le transfert d'un grand nombre de fichiers prend plus de temps que le transfert d'un gros fichier. Rsync résout-il cela?
Cheiron
Lorsque vous effectuez des transferts à distance, rsync totalise les données en transit (à la réception, avant de les écrire sur le disque), il faudra donc plus de temps pour transférer un fichier. Cependant, c'est du temps bien dépensé.
Gene
5

Vous pouvez également utiliser la capacité de session principale des versions plus récentes de SSH. Il est décrit ici:

https://en.wikibooks.org/wiki/OpenSSH/Cookbook/Multiplexing

Tout ce dont vous avez probablement besoin est de modifier / créer votre .ssh / config. Ajoutez-y des définitions qui contrôlent les sessions Master:

ControlMaster auto
ControlPath ~/.ssh/cm_socket/%r@%h:%p
ControlPersist 4h
ServerAliveInterval 30

Ensuite, vous pouvez spécifier votre définition de serveur de premier saut comme:

Host first_hop
Hostname <your first host FQDN or IP>
User <your user>

Et le deuxième saut utilisera votre premier serveur de saut comme proxy:

Host second_hop
Hostname <your second host FQDN or IP>
User <your user>
ProxyCommand ssh -W %h:%p first_hop

N'oubliez pas de créer le répertoire ~ / .ssh / cm_socket et les autorisations de configuration doivent être 644.

Ensuite, vous devriez pouvoir SSH ou SCP directement vers / depuis votre deuxième serveur. Il peut y avoir plus de serveurs enchaînés comme ça.

Jaroslav Kucera
la source
3
De la lecture de votre lien, je ne pense pas que le multiplexage ControlMastersoit nécessaire pour le proxy. La page la plus pertinente de ce wikibook est celle-ci: en.wikibooks.org/wiki/OpenSSH/Cookbook/Proxies_and_Jump_Hosts
IMSoP
Oui je suis d'accord. Il y a plusieurs façons. Cependant, je considère la session Master comme la plus élégante. Il s'agit simplement de préférences personnelles ;-)
Jaroslav Kucera
L'un ou l'autre d'entre nous avait mal compris quelque chose. Pour autant que je puisse voir, la "connexion principale" consiste à utiliser efficacement les ressources du réseau et n'a rien à voir avec la question. Ce n'est pas une manière différente de le faire, c'est juste sans rapport avec la tâche à accomplir.
IMSoP