GNU/Linux >> Znalost Linux >  >> Linux

Kopírování dat přes SSH tunel přes více přeskoků

Řešení 1:

Zdaleka nejjednodušší je to prostě zkopírovat přes scp. Navíc tato syntaxe ve skutečnosti funguje na rozdíl od některých jiných návrhů.

Tuto syntaxi nemůžete snadno překonat. Umožňuje vám rekurzivně kopírovat, rsync nebo cokoli jiného, ​​co byste chtěli, aniž byste se museli obtěžovat zvažováním potenciálně složitých kanálů. Tato syntaxe je intuitivně jasná, bude ji snadněji podporovat Sys Admini, kteří vás sledují, a zbytečně nevyužívá cat.

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

Z manuálové stránky scp:-3 Kopie mezi dvěma vzdálenými hostiteli jsou přenášeny prostřednictvím místního hostitele. Bez této možnosti jsou data kopírována přímo mezi dvěma vzdálenými hostiteli. Všimněte si, že tato možnost deaktivuje měřič průběhu.

V níže uvedeném příkladu

  • Vaše pracovní stanice se jmenuje MacBook-Pro.
  • Dev Jump Box se jmenuje devjumpserver
  • Dev Application Server se jmenuje devapplicationserver
    • Je v LAN zóně DNS s názvem .local
  • QA Jump Box se jmenuje qajumpserver
  • Aplikační server QA se jmenuje qaapplicationserver
    • Je v zóně LAN DNZ s názvem .local
  • Provedeme zkušební kopii 670GB souboru /etc/hosts;-)
  • Předpokládá se, že máte nakonfigurované ověřování pomocí veřejného klíče SSH.



Zde je soubor ~/.ssh/config, který nastavuje přímý přístup z vaší pracovní stanice k aplikačním serverům přes příslušný skok (aka bastion server).

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$



Testování přítomnosti souboru na cílovém serveru, nebude tam.

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$



Nyní zkopírujeme soubor ze serveru Dev Application Server do QA Application prostřednictvím vaší pracovní stanice.

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



Nyní zkontrolujeme přítomnost zkopírovaného souboru na aplikačním serveru QA. Tentokrát tam bude.

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

Poznámka

Při uzavírání připojení ProxyCommand se zobrazí varovné hlášení „Killed by signal 1“. Toto je SSH, které ruší připojení ProxyCommand a není čeho se obávat. Můžete se ho zbavit přidáním LogLevel Quiet do stanzy konfigurace hostitele bastion.

Řešení 2:

POTRUBÍ!

Pokud je internet série trubek, Unix je série trubek -- něco jako:

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

by mělo fungovat.

Pokud potřebujete procházet více hostitelů, přidejte další kanály (a více vnořených vrstev \ -uniklá nabídka) podle potřeby. (Všimněte si však, že pokud se potrubí/únik stane tak složitým, že budete muset nakreslit diagram nebo se uchýlit k počítání na prstech, abyste určili, kolikrát musíte zdvojnásobit úniky, je pravděpodobně čas přiznat porážku a nastavit správnou VPN. !)


Linux
  1. Ssh – Vzdálená plocha přes Ssh Reverzní tunel, který má nahradit Teamviewer?

  2. Ssh – tunelový provoz přes jiný stroj přes Ssh?

  3. Spuštění souboru skriptu přes Ssh přes Sudo?

  1. Ssh – Scp přes více hostitelů?

  2. Nelze spustit X aplikací přes SSH v Linuxu

  3. Jak mohu zkopírovat více souborů přes scp v jednom příkazu?

  1. Jak tunelovat HTTP přes SSH přes SOCKS?

  2. HTTPS SSH tunel

  3. Soubor protokolu Tail na více počítačích přes ssh