Soluzione 1:
Di gran lunga, il modo più semplice è semplicemente copiarlo tramite scp. Inoltre, questa sintassi funziona effettivamente a differenza di alcuni degli altri suggerimenti.
Non puoi battere questa sintassi per facilità. Ti consente di copiare in modo ricorsivo, rsync o qualsiasi altra cosa desideri senza il fastidio di considerare pipe potenzialmente complesse. Questa sintassi è intuitivamente chiara, sarà più prontamente supportata dai Sys Admins che ti seguono e non fa un uso inutile di cat.
scp -3 devappserver:/path/to/copy/from qaappserver:/path/to/copy/to
Dalla pagina man di scp:-3
Le copie tra due host remoti vengono trasferite tramite l'host locale. Senza questa opzione i dati vengono copiati direttamente tra i due host remoti. Tieni presente che questa opzione disabilita la barra di avanzamento.
Nell'esempio qui sotto
- La tua workstation si chiama MacBook-Pro.
- Dev Jump Box si chiama devjumpserver
- Dev Application Server si chiama devapplicationserver
- Si trova sulla zona DNS LAN denominata .local
- Il QA Jump Box si chiama qajumpserver
- QA Application Server è denominato qaapplicationserver
- È sulla zona LAN DNZ denominata .local
- Effettueremo una copia di prova di un file /etc/hosts da 670 GB;-)
- Si presume che tu abbia configurato l'autenticazione con chiave pubblica SSH.
Ecco un file ~/.ssh/config che imposta l'accesso diretto dalla tua workstation ai server delle applicazioni tramite il salto appropriato (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$
Testando la presenza del file sul server di destinazione, non ci sarà.
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$
Ora copiamo un file dal server Dev Application all'applicazione QA tramite la tua workstation.
MacBook-Pro:~ barrychapman$ scp -3 devapplicationserver:/etc/hosts qaapplicationserver:/tmp/ Killed by signal 1. Killed by signal 1. MacBook-Pro:~ barrychapman$
Ora controlliamo la presenza del file copiato sul QA Application Server. Questa volta ci sarà.
MacBook-Pro:~ barrychapman$ ssh qaapplicationserver ls /tmp/hosts /tmp/hosts Killed by signal 1. MacBook-Pro:~ barrychapman$
Nota
Quando chiudi una connessione ProxyCommand, vedrai il messaggio di avviso "Killed by signal 1". Questo è SSH che interrompe la connessione ProxyCommand e non c'è nulla di cui allarmarsi. Puoi sbarazzartene aggiungendo LogLevel Quiet
alla tua stanza di configurazione del bastion host.
Soluzione 2:
TUBI!
Se Internet è una serie di tubi, Unix è una serie di tubi -- qualcosa del tipo:
cat ginormous-file | ssh [email protected] "cat | ssh [email protected] \"cat >out\" "
dovrebbe funzionare.
Se hai bisogno di attraversare più host, aggiungi più pipe (e più layer nidificati di \
-citazione sfuggita) se necessario. (Nota tuttavia che se la pipeline/fuga diventa così complessa che devi disegnare un diagramma o ricorrere al conteggio sulle dita per determinare quante volte devi raddoppiare le fughe è probabilmente il momento di ammettere la sconfitta e impostare una VPN adeguata !)