scp tra due server non nella stessa rete


13

Esistono due server a cui posso accedere con 2 diverse connessioni VPN. Sono riuscito a far funzionare entrambe le VPN contemporaneamente sulla mia macchina (un po 'di regole di routing).

Voglio fare un scp <remote1>:some/file <remote2>:destination/folderdal mio terminale portatile. Ma quando provo questo, il scpcomando che viene invocato su remote1 non riesce a trovare remote2 perché non si trovano nella stessa rete. È possibile forzare il scpcomando a passare attraverso il mio laptop come router?

Se provo con Nautilus (connettersi al server, entrambi i server, quindi copia-incolla) funziona, ma mi piacerebbe farlo da un terminale.


È la tua macchina che contatta sia remote1 che remote2 . Sei sicuro che l'errore sia che remote1 non possa accedere a remote2 ?
Jan

Sì, l'errore è ssh: impossibile risolvere il nome host <remote2>: nome o servizio non noti connessione persa
Danduk82

E se provo a utilizzare l'indirizzo IP direttamente per <remote2> la connessione non riesce dopo un po '(hangout).
Danduk82,

Quindi suppongo che sia la tua macchina che non può connettersi a remote2 . Forse i tempi di connessione VPN fuori o è flakey ...
gen

No funziona, anche il DNS funziona. Ho davvero la sensazione che il comando scp tenti di eseguire la connessione tra remote1 e remote2 direttamente su remote1 .
Danduk82,

Risposte:


34

Le versioni più recenti di scp hanno l'opzione -3

-3

Copies between two remote hosts are transferred through the local host. Without this option the data is copied directly between the two remote hosts

grande! Esattamente quello di cui avevo bisogno. Grazie mille
Danduk82,

1
Grande scoperta, non lo sapevo!
Jan

9

Se hai bisogno di maggiore flessibilità rispetto a scp -3, semplici sshe tubi sono divertenti.

Ciò equivale a reindirizzare il flusso sul computer locale:

ssh sourceRemote 'cat /path/to/sourceFile' \
| ssh destinationRemote 'cat > /path/to/destinationFile'

È quindi possibile aggiungere più reindirizzamenti di stream in qualsiasi momento, ad esempio concatenare più macchine intermedie o salvare una copia locale del file trasferito mentre viene instradato.


2
Otterrai una bella barra di avanzamento se il computer di origine è pvinstallato e sostituisci il primo catcon esso.
liori,

6

Espandendo la risposta di @ Anko, è possibile utilizzare tarper più file:

ssh -q user@sourcehost 'cd /source/path; tar -czf - files...' | \
ssh -q user@desthost 'cd /dest/path; tar -xzf -'

La compressione è del tutto facoltativa: i tuoi dati potrebbero non essere molto comprimibili o abbastanza grandi da giustificare il sovraccarico. Se la tua versione di tarnon supporta lo -zswitch, esegui il pipe through gzip -ce gzip -dcrispettivamente.

PS: attenzione alle versioni tarche non eliminano le barre iniziali durante l'estrazione (ad esempio, scrivere su nomi di percorso assoluti se forniti).

Modifica: -e nonenon è necessario con le pipe, perché uno pseudo-terminale non è allocato.


1
sshha un -Cflag per abilitare la compressione del flusso. Secondo la manpagina, utilizza lo stesso algoritmo di gzipse. La pagina del manuale spiega anche quando usarla: "La compressione è desiderabile su linee modem e altre connessioni lente, ma rallenterà le cose solo su reti veloci".
Anko,

4
@Anko, il problema con l'utilizzo -Cqui è che il computer locale dovrebbe decomprimere e ricomprimere i dati. Dire tardi fare la compressione significa che i dati compressi vengono passati direttamente attraverso il tubo senza alcuna elaborazione.
cjm,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.