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 ответа3

20

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

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

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

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

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

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

1

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .