SFTP через двойной серверный прыжок


15

Я пытаюсь разработать метод, позволяющий мне получить доступ к файлам на SFTP-сервере, а не получить доступ с локального компьютера. В настоящее время мне нужно SSH к удаленному серверу (он находится в определенном IP-блоке, с которого будет принимать конечный SFTP-сервер), а затем оттуда SFTP к целевому серверу. Оттуда getя интересуюсь файлами, перенося их на сервер-посредник, с которого я могу получить файлы либо через общий ресурс Samba, либо через прямой scp. Я также работаю в обратном порядке, где я помещаю файлы на посредника, SSH к нему, затем SFTP к месту назначения и putих в соответствующие папки.

Моя цель - сократить это. К сожалению, существуют ограничения на то, что моя машина работает под управлением Windows (я использую KiTTy и / или Cygwin), и я не могу каким-либо образом изменять промежуточный сервер (или целевой сервер). Я готов использовать программы командной строки или программы с графическим интерфейсом, если они работают и бесплатны.

Есть идеи?

Ответы:


24

По сути, без графического интерфейса или других удобств:

ssh -o ProxyCommand='ssh myfirsthop nc -w 10 %h %p' mydestination

Вы можете сделать это по умолчанию, отредактировав файл конфигурации, по умолчанию ~ / .ssh / config

Host mydestination, mydest2, mydest3
ProxyCommand ssh myfirsthop nc -w 10 %h %p

Это тогда позволяет вам сделать

ssh mydestination
scp mydest2:file.txt ./
scp file.txt mydest3:/tmp/

Конечно, с помощью такой магии вы можете легко

mkdir -pv /tmp/mydest3tmp          # create mountpoint
sshfs mydest3:/tmp /tmp/dest3tmp/  # mount :)

В Windows вы бы использовали WinSCP, который поставляется с (я думаю, IIRC) PLINK (из набора Putty). Я предполагаю, что местоположение по умолчанию для configфайла ssh отличается (я должен был бы гуглить для этого), но я уверен, что это работает более или менее то же самое.

Обратите внимание, что единственное, что вам нужно для этого, - это netcat ( nc) на промежуточном сервере (первый переход). Это вездесущий инструмент для Linux / UNIX [1]; Довольно просто построить статически связанную версию, которая должна работать, если вы можете скопировать ее туда в первую очередь.

[1] обратите внимание, что есть некоторые разновидности, поэтому параметр -w, возможно, должен быть пропущен / записан иначе


1
Вы, сэр, не представляете, как это меня порадовало :) Отлично!
josh.trow

@ josh.trow: Нет, но я рад, что вы сказали мне :) В любое время
сехе

Хотя, как уже обнаружил @ josh.trow, в WinSCP встроена функция туннелирования (см. Другой ответ), если вам когда-либо понадобится использовать настройку туннеля внешним приложением, вот руководство: winscp.net/rus/docs/ guide_tunnel
Мартин Прикрыл

9

Я не собираюсь устанавливать это как принятый ответ, потому что я никогда не нашел бы это без @sehe и @Jakub, но вот что я нашел, что упрощает все ...

WinSCP имеет возможность использовать встроенный туннель SSH. Я не знаю, когда эта функция появилась, но я никогда раньше не замечал ее.

Настройки WinSCP Tunnel


Документация о функции туннелирования: winscp.net/rus/docs/tunneling и winscp.net/eng/docs/ui_login_tunnel
Мартин Прикрыл,

работает и в filezilla!
Hayden Thring

эта функция позволяет только один туннель ... как добавить второй туннель?
Zeetit

@zeetit Тогда вы должны использовать внешний туннель. Все параметры туннелирования описаны в руководстве WinSCP по туннелированию .
Мартин Прикрыл

2

Одним из моих предложений было бы создать прокси socks, используя putty (из окна Windows), а затем прокси-сервер через него через SFTP (скажем, Filezilla sftp).

Вам не нужно будет делать ничего особенного, просто включите прокси-сервер putty socks5, включите filezilla и перенесите ваши файлы на конечный сервер.

(you ==socks5 proxy==> middle server) ==> destination server

Кажется, вы решаете другую проблему, действительно более сложную. Проблема OP состоит в том, что конечный пункт назначения не маршрутизируется от клиента - исходящий трафик SSH в порядке. ( Я считаю, что ваше решение необходимо для «туннелирования» SSH-трафика через прокси-сервер? )
sehe

@ сехе .. что? Вы настраиваете прокси-сервер SSH socks 5 (туннель ssh к среднему блоку), а затем просто проксируете свой SFTP-трафик к блоку назначения, маскируясь под промежуточный сервер. Какую еще проблему я решаю?
Якуб
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.