SCP между двумя сетями


12

Мне нужно передать файл между двумя компьютерами, которые не подключены к одной сети. Я получил третий компьютер, который может видеть обе сети через VPN.

С третьего компьютера я могу сделать:

scp root@firstcomputer:./file ./

И завершите перевод следующим предложением:

scp ./file root@secondcomputer:./

Но я не могу сделать это в одну строку, как показано ниже:

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

Ответ об ошибке

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

Я понимаю, что это, вероятно, потому, что первый компьютер не может видеть второй компьютер. Можно ли дать SCP параметр, который касается того факта, что машина, на которой запущена программа SCP, единственная, кто может видеть оба компьютера?

Кстати, третий компьютер - это Mac с Lion, а первый и второй работают под управлением Debian.

Ответы:


3

Вы должны быть в состоянии использовать туннель SSH.

Предполагая, что вы пытаетесь передать файл с удаленного компьютера («удаленный») на локальный компьютер («локальный»), установите туннель через третий компьютер («шлюз»), набрав на локальном компьютере:

ssh -fNL 12345:remote:22 gatewaylogin@gateway

Затем вы можете запускать неограниченное количество команд SCP в этом туннеле (все еще печатая на локальном компьютере):

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

Я только что проверил это в своей сети, и он работал отлично.

Описанный выше метод подходит, если удаленная сеть безопасна, но если она небезопасна, вам необходимо установить туннель между локальным и шлюзом и еще один туннель между шлюзом и удаленным, связывая их по общему номеру порта.


21

Параметр scp -3 должен быть тем, что вы ищете. Чтобы поместить это в ваш пример:

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

Обратите внимание, что опция -3 была впервые представлена ​​в OpenSSH 5.7, которая была выпущена в начале 2011 года.


Мой scp не реализует -3, когда я выполняю команду, я получаю scp: недопустимый вариант - 3 использования: scp [-1246BCEpqrv] ...
JorgeO

1
Правильно. -3 доступен только в последней версии OpenSSH, которую я не уверен, что Debian уже реализовал.
Рилиндо

Ах, прости за это. Обновлен ответ относительно требования к версии.
Андол

1

Вы можете попробовать это:

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

Это скопирует файл в каталог / tmp на третьем компьютере, и в случае успеха он скопирует этот файл на дополнительный компьютер, а затем очистит себя. Поскольку вы используете оператор &&, каждая команда будет выполняться только в том случае, если предыдущая команда была успешной.


Не знал об операторе &&. Лучше, чем использовать;
JorgeO

Это тот же метод, который использовался в первом примере исходного вопроса, которого пытались избежать (скопировать с компьютера A на локальный компьютер, а затем скопировать локальный файл на компьютер B).
Джейсон С
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.