Рейтинг:0

FTP через SSH (не SFTP?), Когда файлы находятся на третьем сервере, а не на сервере SSH

флаг br

У меня есть машина А. С него я могу подключиться по SSH к машине B. Машина B может подключиться по FTP к машине C. Я хочу загрузить файлы с C на A. У меня нет прямого доступа из A в C.

                 Порт 20 и 21
✓ ✓ Управление FTP ✓ Управление FTP -
â â SSH â âвввввввввввва ***
â A ââââââºâ B â â C - с файлами â
- º Я хочу
✓ Данные FTP ✓
                 Случайные порты ââ

Я знаю, что на этом сайте есть миллион вопросов о SFTP. Насколько я могу судить, это не то же самое, что SFTP. С SFTP кажется, что SSH-сервер должен быть тем же сервером, на котором есть файлы для загрузки, что здесь не проблема. Это правильно? Или есть способ сделать это с помощью простой команды SFTP и некоторых дополнительных аргументов?

Есть ли простые способы сделать это? Файлы большие, а диск и память на B крошечные, поэтому, если возможно, я хотел бы передавать данные напрямую. (По сравнению с двухэтапной FTP-загрузкой на диск B.)

В общем, SSH может туннелировать что угодно. Но очевидно, что FTP использует больше, чем просто порты 20 и 21. Он использует целую кучу случайных и непредсказуемых портов, новых для каждой файловой операции. Возможный диапазон таких FTP-портов настолько велик, что с одним клиентом, который я попробовал, я не смог просто перенаправить весь диапазон с помощью SSH. (Обратите внимание, что я пытаюсь пассивный FTP, где все сетевые подключения инициируются с клиента на сервер. В отличие от активный FTP, где C инициирует обратное соединение с B, что невозможно из-за NAT между ними.)

Я попытался написать скрипт на python, взламывая вместе Стандартная библиотека FTP и сторонний Библиотека туннелей SSH. Это довольно запутанное и дерганое решение, в результате которого я открываю новый порт для каждого нового файла, но никогда его не закрываю. Также недавнее обновление одной библиотеки нарушило некоторые зависимости, поэтому теперь скрипт не работает с последней версией этих библиотек. У меня возникает соблазн переписать решение с учетом лежащего в его основе Парамико библиотека. Но я боюсь, что это глубокая кроличья нора. Этот материал действительно неудобен. (Дайте мне знать, если вам нужно увидеть мою попытку. Я пытаюсь опустить ее, чтобы избежать проблема X/Y.)

Есть ли более простой способ сделать это туннелирование?

Я бы предпочел решение с Python, но на данный момент я достаточно отчаялся, чтобы использовать любой инструмент.

paladin avatar
флаг id
Как насчет того, чтобы установить обратный ftp-прокси-сервер на машине B? Машина B проксирует ftp-сервер машины C. Машина A использует ftp через SSH на машине B. Это должно легко работать, вам точно не нужно ничего «взламывать».
Рейтинг:3
флаг us
Rob

«Традиционным» решением для этого является использование FTP-клиента, НОСКИ 5 поддержку и вместо переадресации определенных портов через ssh настройте динамическую переадресацию портов (клиент ssh будет действовать как сервер SOCKS 5)

Затем на хосте А:

ssh -D локальный: 10108 пользователь@хост-B 

И настройте свой FTP-клиент для использования прокси-сервера SOCKS5 на этом порту, например, в WinSCP. https://winscp.net/eng/docs/ui_login_proxy или отредактируйте нкфтп Файл конфигурации $HOME/.ncftp/брандмауэр или использовать

curl --socks5-hostname localhost:10108 ftp://host-c/путь/к/файлу
falsePockets avatar
флаг br
Когда я смотрю в Интернете, чтобы узнать о прокси-серверах SOCKS, некоторые сайты ([1](https://surfshark.com/blog/socks-proxy), [2](https://www.makeuseof.com/tag/what- is-a-socks5-proxy/)) говорят, что трафик из A в B не зашифрован. Можете ли вы подтвердить, что если я использую SOCKS *через SSH*, то трафик из A в B *зашифрован* (и, конечно, из B в C он не зашифрован).
флаг us
Rob
Весь трафик в туннеле будет зашифрован.
флаг us
Rob
Трафик между вашим ftp-клиентом и прокси-сервером socks не шифруется, что является основной проблемой безопасности при использовании удаленного сервера socks (работающего где-то в Интернете или в корпоративной сети). Но с динамической переадресацией портов ssh сервер socks работает на тот же хост, а не где-то в вашей корпоративной сети или в Интернете.
Рейтинг:2
флаг bd

Вы можете использовать SSH в качестве SOCKS-прокси. Клиент SSH на A будет работать как сервер SOCKS5, туннелируя все запросы на подключение к B. Вам понадобится FTP-клиент SOCKSified на A.

То, как вы активируете функциональность прокси-сервера SOCKS, зависит от клиента SSH, используемого на A. Найдите «динамическую переадресацию портов» в документации. Для стандартного клиента OpenSSH укажите параметр -Д 1080 чтобы он прослушивал стандартный порт SOCKS5. Для PuTTY перейдите в «Соединение» — «SSH» — «Туннели» в диалоговом окне конфигурации и добавьте переадресованный порт с пунктом назначения «Динамический».

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.