GNU/Linux >> Tutoriels Linux >  >> Linux

Copier les données via le tunnel SSH sur plusieurs sauts

Solution 1 :

De loin, le moyen le plus simple consiste simplement à le copier via scp. De plus, cette syntaxe fonctionne réellement contrairement à certaines des autres suggestions.

Vous ne pouvez pas battre cette syntaxe pour plus de facilité. Il vous permet de copier, rsynchroniser ou tout ce que vous voulez de manière récursive sans avoir à prendre en compte des tuyaux potentiellement complexes. Cette syntaxe est intuitivement claire, sera plus facilement supportable par les Sys Admins qui vous suivent et ne fait pas un usage inutile de cat.

scp -3 devappserver:/path/to/copy/from qaappserver:/path/to/copy/to

À partir de la page de manuel scp :-3 Les copies entre deux hôtes distants sont transférées via l'hôte local. Sans cette option, les données sont copiées directement entre les deux hôtes distants. Notez que cette option désactive la jauge de progression.

Dans l'exemple ci-dessous

  • Votre poste de travail s'appelle MacBook-Pro.
  • Dev Jump Box s'appelle devjumpserver
  • Dev Application Server est nommé devapplicationserver
    • Est sur la zone DNS LAN nommée .local
  • QA Jump Box s'appelle qajumpserver
  • QA Application Server est nommé qaapplicationserver
    • Est sur la zone LAN DNZ nommée .local
  • Nous allons effectuer une copie test d'un fichier /etc/hosts de 670 Go ;-)
  • On suppose que vous avez configuré l'authentification par clé publique SSH.



Voici un fichier ~/.ssh/config qui met en place l'accès direct depuis votre poste de travail aux serveurs d'application via le saut approprié (alias serveur bastion).

MacBook-Pro:~ barrychapman$ cat ~/.ssh/config
Host *
  ServerAliveInterval 60
Host devapplicationsever
  HostName devapplicationserver.local
  ProxyCommand ssh -i ~/.ssh/id_rsa [email protected] -W %h:%p
  User barrychapman
Host qaapplicationserver
  HostName qaapplicationserver.local
  ProxyCommand ssh -i ~/.ssh/id_rsa [email protected] -W %h:%p
  User barrychapman

MacBook-Pro:~ barrychapman$



Test de présence du fichier sur le serveur cible, il n'y sera pas.

MacBook-Pro:~ barrychapman$ ssh qaapplicationserver ls /tmp/hosts
ls: cannot access /tmp/hosts: No such file or directory
Killed by signal 1.
MacBook-Pro:~ barrychapman$



Copions maintenant un fichier du serveur Dev Application vers l'application QA via votre poste de travail.

MacBook-Pro:~ barrychapman$ scp -3 devapplicationserver:/etc/hosts qaapplicationserver:/tmp/
Killed by signal 1.
Killed by signal 1.
MacBook-Pro:~ barrychapman$



Vérifions maintenant la présence du fichier copié sur le QA Application Server. Ce sera là cette fois.

MacBook-Pro:~ barrychapman$ ssh qaapplicationserver ls /tmp/hosts
/tmp/hosts
Killed by signal 1.
MacBook-Pro:~ barrychapman$ 

Remarque

Lors de la fermeture d'une connexion ProxyCommand, vous verrez le message d'avertissement "Tué par le signal 1". C'est SSH qui détruit la connexion ProxyCommand et il n'y a pas lieu de s'alarmer. Vous pouvez vous en débarrasser en ajoutant LogLevel Quiet à la strophe de configuration de votre hôte bastion.

Solution 2 :

TUYAUX !

Si Internet est une série de tubes, Unix est une série de tubes -- quelque chose comme :

cat ginormous-file | ssh [email protected] "cat | ssh [email protected] \"cat >out\" "

devrait fonctionner.

Si vous devez traverser plus d'hôtes, ajoutez plus de canaux (et plus de couches imbriquées de \ -citation échappée) selon les besoins. (Notez cependant que si le pipeline/l'échappement devient si complexe que vous devez dessiner un diagramme ou recourir à compter sur vos doigts pour déterminer combien de fois vous devez doubler les échappements, il est probablement temps d'admettre la défaite et de mettre en place un VPN approprié !)


Linux
  1. Impossible d'exécuter des applications X via SSH sous Linux

  2. Comment puis-je tunneliser tout mon trafic réseau via SSH ?

  3. Comment puis-je copier plusieurs fichiers sur scp en une seule commande ?

  4. Comment tunnel HTTP sur SSH via SOCKS ?

  5. Copier des fichiers volumineux sur plusieurs machines sur un réseau local

Reprendre les fichiers partiellement transférés via SSH à l'aide de Rsync

Comment utiliser la commande rsync pour copier des données localement et via SSH

Ssh – Trafic de tunnel via une autre machine via Ssh ?

Exécuter un fichier de script sur Ssh via Sudo ?

Comment copier à distance des fichiers via SSH sans entrer de mot de passe

Transférer SSH via un tunnel SSH