SCP zwischen zwei Netzwerken

12

Ich muss eine Datei zwischen zwei Computern übertragen, die nicht mit demselben Netzwerk verbunden sind. Ich habe einen dritten Computer, der beide Netzwerke über ein VPN sehen kann.

Vom dritten Computer aus kann ich Folgendes tun:

scp root@firstcomputer:./file ./

Und beenden Sie die Übertragung mit folgendem Satz:

scp ./file root@secondcomputer:./

Aber ich kann es nicht in nur einer Zeile tun, wie folgt:

scp root@firstcomputer:./file root@secondcomputer:./

Die Fehlerantwort ist

ssh: connect to host secondcomputer port 22: No route to host
lost connection

Mir ist klar, dass dies wahrscheinlich daran liegt, dass der erste Computer den zweiten Computer nicht sehen kann. Ist es möglich, SCP einen Parameter zuzuweisen, der die Tatsache berücksichtigt, dass der Computer, auf dem das SCP-Programm ausgeführt wird, der einzige ist, der beide Computer sehen kann?

Übrigens ist der dritte Computer ein Mac mit Lion und auf dem ersten und zweiten läuft Debian.

JorgeO
quelle

Antworten:

3

Sie sollten in der Lage sein, einen SSH-Tunnel zu verwenden.

Angenommen, Sie versuchen, eine Datei von einem entfernten Computer ("remote") auf Ihren lokalen Computer ("local") zu übertragen, bauen Sie den Tunnel über den dritten Computer ("gateway") auf, indem Sie dies auf Ihrem lokalen Computer eingeben:

ssh -fNL 12345:remote:22 gatewaylogin@gateway

Dann können Sie eine unbegrenzte Anzahl von SCP-Befehlen in diesem Tunnel ausführen (noch auf Ihrem lokalen Computer eingeben):

scp -P 12345 remotelogin@localhost://path/to/remote/file /local/path/where/you/want/file

Ich habe das gerade in meinem Netzwerk getestet und es hat perfekt funktioniert.

Die obige Methode ist in Ordnung, wenn das Remotenetzwerk sicher ist. Wenn es jedoch nicht sicher ist, müssen Sie einen Tunnel zwischen lokal und Gateway und einen weiteren Tunnel zwischen Gateway und Remote einrichten, der die beiden durch eine gemeinsame Portnummer verbindet.

Mantipula
quelle
21

Die scp-Option -3 sollte genau das sein, wonach Sie suchen. Um es in Ihrem Beispiel auszudrücken:

scp -3 root@firstcomputer:./file root@secondcomputer:./

Beachten Sie, dass die Option -3 erstmals in OpenSSH 5.7 eingeführt wurde, das Anfang 2011 veröffentlicht wurde.

andol
quelle
Mein scp implementiert -3 nicht, wenn ich den Befehl ausführe, den ich erhalte scp: illegale Option - 3 Verwendung: scp [-1246BCEpqrv] ...
JorgeO
1
Das ist richtig. -3 ist nur in der neuesten Version von OpenSSH verfügbar, die Debian noch nicht implementiert hat.
Rilindo
Ahh, tut mir leid. Die Antwort bezüglich der Versionsanforderungen wurde aktualisiert.
Andol
1

Sie können dies versuchen:

root@firstcomputer:./file /tmp && scp /tmp/file root@secondcomputer:./ && rm /tmp/file

Dadurch wird die Datei in das Verzeichnis / tmp auf dem dritten Computer kopiert. Wenn dies erfolgreich ist, wird die Datei erneut auf den sekundären Computer kopiert und anschließend bereinigt. Da Sie den Operator && verwenden, wird jeder Befehl nur ausgeführt, wenn der vorherige Befehl erfolgreich war.

Rilindo
quelle
Wusste nichts über den Operator &&. Besser als mit;
JorgeO
Dies ist die gleiche Technik wie bei der ursprünglichen Frage, die im ersten Beispiel verwendet wurde und die vermieden werden sollte (Kopieren von Computer A auf lokalen Computer und anschließendes Kopieren der lokalen Datei auf Computer B).
Jason C