SCP między dwiema sieciami

12

Muszę przesłać plik między dwoma komputerami, które nie są podłączone do tej samej sieci. Mam trzeci komputer, który widzi obie sieci za pośrednictwem VPN.

Z trzeciego komputera mogę:

scp root@firstcomputer:./file ./

I zakończ transfer następującym zdaniem:

scp ./file root@secondcomputer:./

Ale nie mogę tego zrobić w jednym wierszu, jak następuje:

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

Odpowiedź błędu to

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

Zdaję sobie sprawę, że prawdopodobnie dlatego, że pierwszy komputer nie widzi drugiego komputera. Czy można nadać SCP parametr, który dotyczy faktu, że maszyna z programem SCP jest jedyną, która może zobaczyć oba komputery?

Nawiasem mówiąc, trzeci komputer to Mac z Lionem, a na pierwszej i drugiej działa Debian.

JorgeO
źródło

Odpowiedzi:

3

Powinieneś być w stanie korzystać z tunelu SSH.

Zakładając, że próbujesz przenieść plik z komputera zdalnego („zdalnego”) na komputer lokalny („lokalny”), utwórz tunel za pośrednictwem trzeciego komputera („bramy”), wpisując to na komputerze lokalnym:

ssh -fNL 12345:remote:22 gatewaylogin@gateway

Następnie możesz uruchomić nieograniczoną liczbę poleceń SCP w tym tunelu (nadal pisząc na komputerze lokalnym):

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

Właśnie przetestowałem to w mojej sieci i działało idealnie.

Powyższa metoda jest odpowiednia, jeśli sieć zdalna jest bezpieczna, ale jeśli nie jest bezpieczna, musisz ustanowić tunel między bramą lokalną a bramą i inny tunel między bramą a komputerem zdalnym, łącząc oba za pomocą wspólnego numeru portu.

Mantipula
źródło
21

Opcja scp -3 powinna być tym, czego szukasz. Aby umieścić to w swoim przykładzie:

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

Zauważ, że opcja -3 została po raz pierwszy wprowadzona w OpenSSH 5.7, który został wydany na początku 2011 roku.

andol
źródło
Mój scp nie implementuje -3, kiedy wykonuję polecenie, otrzymuję scp: nielegalna opcja - 3 użycie: scp [-1246BCEpqrv] ...
JorgeO
1
To jest poprawne. -3 jest dostępna tylko w najnowszej wersji OpenSSH, której nie jestem pewien, czy Debian już zaimplementował.
Rilindo
Przepraszam za to. Zaktualizowałem odpowiedź dotyczącą wymagań wersji.
andol
1

Możesz spróbować:

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

Spowoduje to skopiowanie pliku do katalogu / tmp na trzecim komputerze, a jeśli się powiedzie, skopiuje ten plik na komputer pomocniczy, a następnie sam się wyczyści. Ponieważ używasz operatora &&, każde polecenie zostanie wykonane tylko wtedy, gdy poprzednie polecenie zakończy się powodzeniem.

Rilindo
źródło
Nie wiedziałem o operatorze &&. Lepsze niż używanie;
JorgeO,
Jest to ta sama technika, której użyło pierwotne pytanie w pierwszym przykładzie, której próbowano uniknąć (skopiuj z komputera A na komputer lokalny, a następnie skopiuj plik lokalny na komputer B).
Jason C