Ř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. !)