В любом случае, попробуйте следующее на A , sshв B с -Dаргументом,
ssh -D 1080 address-of-B
который действует как прокси-сервер SOCKS5 127.0.0.1:1080, который может использоваться всем, что поддерживает прокси-соединения SOCKS5. Видимо, wgetможно сделать это , используя переменную окружения
Обратите внимание, что иногда curlэто более удобно (т.е. я не уверен, что wgetсмогу выполнить поиск имени хоста через SOCKS5; но я полагаю, что это не одна из ваших проблем); также Firefox может работать полностью через такой прокси-сервер SOCKS5.
Edit Я только сейчас заметил, что вы ищете однострочное решение. Ну как насчет
Очевидно, SOCKS_SERVERпеременная окружения не влияет на Ubuntu 14.04.
Касперд
4
Согласно этому другому ответу , wgetне имеет поддержки SOCKS_SERVERпеременной. Этот ответ предлагает использовать curl --socks5-hostnameили curl --socks5.
Денилсон Са Майя
@kasperd, так это просто Ubuntu, где он не работает, или переменная вообще не связана с wget? похоже, что переменная может быть для socksifyвместо.
CNST
@cnst Я не видел доказательств того, что любая версия wget поддерживает носки. socksifyэто не настройка, это отдельная программа.
Касперд
так что, по сути, если вы хотите SOCKS_SERVERоказать какое-либо влияние wget, то вам нужно установить ports.su/security/dante , а затем запустить socksify wgetвместоwget
cnst
3
Другой подход может состоять в том, что вы обычно входите в систему B, где вы начинаете screenсеанс. Там вы делаете wgetсвои файлы - все в один каталог.
И там программа может счастливо работать; Вы просто отсоединяетесь от экрана, но позволяете ему работать в фоновом режиме.
Если загрузка закончены (может быть , даже раньше), вы можете fech данные от Bдо Aиспользования rsync(мое предпочтение).
Скачайте, скомпилируйте и при необходимости установите proxychains-ng .
Создайте proxychains.confфайл в текущем каталоге, или в ~/.proxychains/proxychains.conf, или в /etc/proxychains.conf.
Либо создайте один файл в другом месте или с другим именем и укажите его с помощью -fаргумента командной строки или PROXYCHAINS_CONF_FILEпеременной среды.
Беги ssh -D 1234 your_host_b. Это заставит ssh прослушивать порт 1234 на локальном хосте и использовать ваш удаленный хост в качестве прокси-сервера SOCKS.
В качестве альтернативы, запустите ssh -ND 1234 your_host_bвместо этого. -Nбудет препятствовать выполнению команды ssh на удаленном сервере (то есть не будет открывать оболочку).
Run: proxychains4 yourcommandhere yourparametershere. Смотрите несколько примеров:
Чтобы использовать wgetпрокси-сервер SOCKS5 от ssh, вам необходимо установить security/danteпакет, чтобы использовать SOCKS_SERVERопцию с socksifyутилитой.
sudo pkg_add dante
Впоследствии вы открываете SSH-соединение в фоновом режиме:
ssh -N -C -D1080 user@hostB &
И используйте wget через SOCKS5 прокси через socksify:
Вы можете создать ssh-туннель из блока A в блок B и добавить в таблицу маршрутизации в блоке A, что веб-сайт C доступен через туннель в блок B. Вы должны разрешить пересылку пакетов на блоке B.
Здесь вы можете увидеть очень хорошее пошаговое руководство ...
Вам нужно будет создать туннель на машине B, который перенаправит вызов на сайт C. Но я озадачен, почему это будет быстрее, если только у вашего интернет-провайдера нет некоторых ограничений.
Я не знаю oneliner, но это не намного сложнее.
На машине 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поэтому вы должны использовать:
Разве это не будет работать, только если файл доступен без виртуального хостинга на основе имен HTTP 1.1? Поскольку в запросе GET, выданном wget, имя хоста будет указано как B, а не C.
CVn
@ MichaelKjörling У меня недостаточно знаний, чтобы ответить тебе.
SOCKS_SERVER
переменная окружения не влияет на Ubuntu 14.04.wget
не имеет поддержкиSOCKS_SERVER
переменной. Этот ответ предлагает использоватьcurl --socks5-hostname
илиcurl --socks5
.socksify
вместо.socksify
это не настройка, это отдельная программа.SOCKS_SERVER
оказать какое-либо влияниеwget
, то вам нужно установить ports.su/security/dante , а затем запуститьsocksify wget
вместоwget
Другой подход может состоять в том, что вы обычно входите в систему
B
, где вы начинаетеscreen
сеанс. Там вы делаетеwget
свои файлы - все в один каталог.И там программа может счастливо работать; Вы просто отсоединяетесь от экрана, но позволяете ему работать в фоновом режиме.
Если загрузка закончены (может быть , даже раньше), вы можете fech данные от
B
доA
использованияrsync
(мое предпочтение).источник
Вдохновленный другим ответом на другой вопрос , я предлагаю использовать proxychains-ng (который является более новой версией proxychains ).
proxychains.conf
файл в текущем каталоге, или в~/.proxychains/proxychains.conf
, или в/etc/proxychains.conf
.-f
аргумента командной строки илиPROXYCHAINS_CONF_FILE
переменной среды.В вашем
proxychains.conf
файле добавьте:Беги
ssh -D 1234 your_host_b
. Это заставит ssh прослушивать порт 1234 на локальном хосте и использовать ваш удаленный хост в качестве прокси-сервера SOCKS.ssh -ND 1234 your_host_b
вместо этого.-N
будет препятствовать выполнению команды ssh на удаленном сервере (то есть не будет открывать оболочку).proxychains4 yourcommandhere yourparametershere
. Смотрите несколько примеров:proxychains4 wget -O - http://ifconfig.co/
proxychains4 -q links http://ifconfig.co/
источник
Вариант 0:
Чтобы использовать
wget
прокси-сервер SOCKS5 отssh
, вам необходимо установитьsecurity/dante
пакет, чтобы использоватьSOCKS_SERVER
опцию сsocksify
утилитой.Впоследствии вы открываете SSH-соединение в фоновом режиме:
И используйте wget через SOCKS5 прокси через socksify:
Опция 1:
Просто отправьте файл
stdout
на сервер и прочитайте егоstdin
на своей рабочей станции.источник
Вы можете создать ssh-туннель из блока A в блок B и добавить в таблицу маршрутизации в блоке A, что веб-сайт C доступен через туннель в блок B. Вы должны разрешить пересылку пакетов на блоке B.
Здесь вы можете увидеть очень хорошее пошаговое руководство ...
источник
Вам нужно будет создать туннель на машине B, который перенаправит вызов на сайт C. Но я озадачен, почему это будет быстрее, если только у вашего интернет-провайдера нет некоторых ограничений.
Я не знаю oneliner, но это не намного сложнее.
На машине A вы делаете (я взял 11111 случайным образом, вы можете взять все, что захотите, если он> 1024, или вам нужно быть пользователем root)
Имя пользователя на B - это то, которое вы используете для подключения к B. Это должно создать туннель на порту 11111 на машине B, который перенаправляет на порт 80 (веб-сайт в HTTP использует 443 для HTTPS) на машине C (надеюсь, я не связывался приказ ;) )
Затем вы можете загрузить файл напрямую с компьютера A через компьютер B. Я предполагаю, что файл находится на,
http://C/path/to/file
поэтому вы должны использовать:источник
Вы можете сделать это через переадресацию портов (туннелирование ssh). Вот ресурс: http://www.jfranken.de/homepages/johannes/vortraege/ssh2_inhalt.en.html#ToC9
По сути, вы должны настроить переадресацию портов на B. Когда A отправляет wget на B, B перенаправляет пакеты на C и отправляет результаты обратно A.
источник