Как загрузить файл через SSH-сервер?

У меня есть сервер в США (Linux box B) и мой домашний компьютер (Linux box A), и мне нужно скачать файл с сайта C,

Проблема в том, что очень медленно загружать файл прямо из A, поэтому мне нужно загрузить файл при входе в B, а sftp получить файл от A.

Есть ли способ загрузить файл и использовать B в качестве прокси напрямую только с помощью одной строки?

7 Solutions collect form web for “Как загрузить файл через SSH-сервер?”

(Странная ситуация, не похоже на неравенство треугольника для интернет-маршрутизации?)

В любом случае, попробуйте следующее, на A , ssh в B с аргументом -D ,

 ssh -D 1080 address-of-B 

который действует как прокси-сервер SOCKS5 на 127.0.0.1:1080 , который может использоваться любым, что поддерживает проксированные соединения SOCKS5. По-видимому, wget может это сделать , используя переменную окружения

 export SOCKS_SERVER=127.0.0.1:1080 wget http://server-C/whatever 

Обратите внимание, что иногда curl является более удобным (т. Е. Я не уверен, что wget может выполнять поиск имени хоста через SOCKS5, но это не одна из ваших проблем, я полагаю); Firefox также может полностью работать с таким прокси-сервером SOCKS5.

Редактировать Я только что заметил, что вы ищете однострочное решение. Ну, как насчет

 ssh address-of-B 'wget -O - http://server-C/whatever' >> whatever 

т.е. перенаправить вывод wget beet в stdout и перенаправить локальный выход (из ssh выполняющего wget удаленно) в файл.

Кажется, что это работает, вывод wget просто немного запутан (« сохранен на »), вы можете избавиться от него, добавив -q к вызову wget .

Другой подход может заключаться в том, что вы обычно регистрируетесь в B , где вы начинаете сеанс screen . Там вы делаете wget своих файлов – все в один каталог.

И там программа может с радостью работать; вы просто отсоединяетесь от экрана, но пусть он работает в фоновом режиме.

Если загрузка завершена (возможно, даже раньше), вы можете зафиксировать данные от B до A используя rsync (мои предпочтения).

Вдохновленный другим ответом на другой вопрос , я предлагаю использовать proxychains-ng (что является новой версией proxychains ).

  1. Загрузите, скомпилируйте и, возможно, установите proxychains-ng .
  2. Создайте файл proxychains.conf в текущем каталоге или в ~/.proxychains/proxychains.conf или в /etc/proxychains.conf .
    • В качестве альтернативы, создайте один файл в другом месте или с другим именем и укажите, есть ли аргумент командной строки -f или переменная среды PROXYCHAINS_CONF_FILE .
    • Имеется пример файла конфигурации . Наиболее подходящие варианты находятся в самом конце.
  3. В файле proxychains.conf добавьте:

     [ProxyList] socks5 127.0.0.1 1234 
  4. Запустите ssh -D 1234 your_host_b . Это заставит ssh прослушивать порт 1234 на локальном хосте и использовать ваш удаленный хост в качестве прокси-сервера SOCKS.

    • Кроме того, вместо этого запустите ssh -ND 1234 your_host_b . -N предотвратит запуск ssh любой команды на удаленном сервере (т.е. она не откроет оболочку).
  5. Запустите: proxychains4 yourcommandhere yourparametershere . См. Некоторые примеры:
    • proxychains4 wget -O - http://ifconfig.co/
    • proxychains4 -q links http://ifconfig.co/

Вы можете сделать туннель ssh из окна A в поле B и добавить в таблицу маршрутизации в поле A, что веб-сайт C доступен через туннель в поле B. Вы должны разрешить пересылку пакетов в поле B.

Здесь вы можете увидеть очень хороший пошаговый учебник …

Вам нужно будет создать туннель на машине. B tha перенаправит вызов на веб-сайт C. Но я озадачен тем, почему это будет быстрее, если только ваш интернет-провайдер не станет каким-то ограничением.

Я не знаю, онлайнер, но это не намного сложнее.

На машине A вы делаете (я случайно взял 11111, вы можете взять все, что хотите, до тех пор, пока оно равно 1024, или вам нужно будет быть root)

 ssh -f -C -N -L 11111:C:80 username@B 

Имя пользователя в B – это тот, который вы используете для подключения к B. Это должно создать туннель на порту 11111 на машине B, который перенаправляет на порт 80 (веб-сайт в HTTP использует 443 для HTTPS) на машине C (надеюсь, я не испортил приказ 😉 )

Затем вы можете загрузить файл непосредственно с машины A через машину B. Я предполагаю, что файл находится по адресу http://C/path/to/file поэтому вы использовали бы:

 wget http://B:11111/path/to/file 

Вы можете сделать это через переадресацию портов (туннелирование ssh). Вот ресурс: http://www.jfranken.de/homepages/johannes/vortraege/ssh2_inhalt.en.html#ToC9

По существу, вы должны настроить перенаправление портов на B. Когда A выдает wget на B, B пересылает пакеты на C и отправляет результаты обратно в A.

Вариант 0:

Чтобы использовать wget с прокси-сервером SOCKS5 из ssh , вам необходимо установить пакет security/dante , чтобы использовать опцию SOCKS_SERVER с socksify утилиты socksify .

 sudo pkg_add dante 

Впоследствии вы открываете соединение SSH в фоновом режиме:

 ssh -N -C -D1080 user@hostB & 

И используйте wget через прокси-сервер SOCKS5 через socksify:

 env SOCKS_SERVER=127.0.0.1:1080 socksify wget http://website-C 

Опция 1:

Просто передайте файл на stdout на сервере и прочитайте его с stdin на своей рабочей станции.

 ssh -C user@hostB "wget -O- http://website-C" >> file-from-website-C 
  • Как загрузить openSUSE 12.1 через `wget -c`?
  • Могу ли я сделать завиток или перезагрузить wget, если отключен?
  • Загрузить pdf-файлы с помощью wget
  • Резюме не удалось загрузить с помощью инструмента командной строки Linux
  • Как загрузить из SourceForge с помощью wget?
  • Почему «wget -r -e robots = off http://ccachicago.org» не действует рекурсивно?
  • Как запустить HTTP-запрос без использования CURL
  • Как передать аргумент, хранящийся в переменной, в WGET
  • Метод для быстрого поиска DNS-поиска во время wget
  • Записать wget link-rewrite обо всех загруженных файлах
  • Загрузите только определенные каталоги с FTP-сайта с помощью wget
  • Interesting Posts

    Как использовать awk вместе с командой, чтобы показать идентификатор процесса командой «ps»

    Запретить `apt-get`,` yum` устанавливать бинарные файлы setuid, когда они запускаются через sudo

    Как я могу избавиться от раковины Pulseaudio?

    Ведение различных мест Dropbox для одной учетной записи Dropbox на разных хостах

    Связывание «..» происходит где-то, кроме родительского каталога и других странных fs beharviors

    есть ли libboost-all вместо libboost-all-dev?

    Как «человек» делает двойные кавычки не как удвоенные обратные и простые символы?

    Модули ядра: .o vs .ko

    inputrc неправильно загружается

    Удаление пользователя samba: pbdedit vs. smbpasswd, какая разница?

    Создайте раздел GPT, охватывающий свободное пространство

    разбиение файла на номер столбца

    Как извлечь и сшить многострочный tar arcvhive без начального файла

    Миграция с двойной загрузки на тройную загрузку

    Grub 2 – попытка загрузки в «загрузчик Windows» загружает меня обратно в grub

    Linux и Unix - лучшая ОС в мире.