Мне нужно передать файл между двумя компьютерами, которые не подключены к одной сети. У меня есть третий компьютер, который видит обе сети через 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.
решение1
Вы должны иметь возможность использовать SSH-туннель.
Предположим, что вы пытаетесь передать файл с удаленного компьютера («удаленный») на свой локальный компьютер («локальный»), установите туннель через третий компьютер («шлюз»), введя на своем локальном компьютере следующее:
ssh -fNL 12345:remote:22 gatewaylogin@gateway
Затем вы можете запустить неограниченное количество команд SCP в этом туннеле (все еще печатая на своем локальном компьютере):
scp -P 12345 remotelogin@localhost://path/to/remote/file /local/path/where/you/want/file
Я только что проверил это в своей сети, и все работает отлично.
Описанный выше метод хорош, если удаленная сеть защищена, но если она не защищена, вам придется установить туннель между локальной сетью и шлюзом, а также еще один туннель между шлюзом и удаленной сетью, связав их общим номером порта.
решение2
Опция scp -3 должна быть тем, что вы ищете. Чтобы использовать ее в вашем примере:
scp -3 root@firstcomputer:./file root@secondcomputer:./
Обратите внимание, что опция -3 впервые была представлена в OpenSSH 5.7, выпущенном в начале 2011 года.
решение3
Вы можете попробовать это:
root@firstcomputer:./file /tmp && scp /tmp/file root@secondcomputer:./ && rm /tmp/file
Это скопирует файл в каталог /tmp на третьем компьютере, и если это будет успешно, он повторно скопирует этот файл на вторичный компьютер, а затем очистит себя. Поскольку вы используете оператор &&, каждая команда будет выполняться только в том случае, если предыдущая команда будет успешной.