(Dziwna sytuacja, czy coś takiego jak nierówność trójkąta nie dotyczy routingu przez Internet?)
W każdym razie wypróbuj poniższe, na A , sshdo B z -Dargumentem,
ssh -D 1080 address-of-B
który działa jako serwer proxy SOCKS5 127.0.0.1:1080, z którego można korzystać we wszystkich elementach obsługujących połączenia proxy SOCKS5. Najwyraźniej wgetmożna to zrobić za pomocą zmiennej środowiskowej
Zauważ, że czasami curljest to bardziej przydatne (tzn. Nie jestem pewien, czy wgetmogę wyszukiwać nazwy hostów za pośrednictwem SOCKS5; ale nie jest to jedna z twoich obaw); także Firefox jest w stanie działać całkowicie za pośrednictwem takiego proxy SOCKS5.
Edit Właśnie teraz zauważyła, że szukasz w jednej linii rozwiązania. A co powiesz na to?
Najwyraźniej SOCKS_SERVERzmienna środowiskowa nie ma wpływu na Ubuntu 14.04.
kasperd
4
Zgodnie z tą inną odpowiedzią , wgetnie ma wsparcia dla SOCKS_SERVERzmiennej. Ta odpowiedź sugeruje użycie curl --socks5-hostnamelub curl --socks5.
Denilson Sá Maia,
@kasperd, więc czy to po prostu ubuntu tam, gdzie nie działa, czy zmienna w ogóle nie jest powiązana z wget? wydaje się, że zmienna może być socksifyzamiast.
cnst
@ cnst Nie widziałem żadnych dowodów na to, że jakakolwiek wersja wget ma obsługę skarpet. socksifynie jest ustawieniem, to osobny program.
kasperd
więc, w zasadzie, jeśli chcesz SOCKS_SERVERmieć jakikolwiek wpływ wget, musisz zainstalować ports.su/security/dante , a następnie uruchomić socksify wgetzamiastwget
cnst
3
Innym podejściem może być to, że zwykle logujesz się w miejscu B, w którym zaczynasz screensesję. Tam robisz wgetswoje pliki - wszystko w jednym katalogu.
I tam program z radością może działać; po prostu odłączysz się od ekranu, ale pozwól mu działać w tle.
Jeśli pobieranie zostanie zakończone (może nawet wcześniej), możesz wybrać dane od Bdo Aużywania rsync(moje preferencje).
Pobierz, skompiluj i opcjonalnie zainstaluj proxy-łańcuchy .
Utwórz proxychains.confplik w bieżącym katalogu, w ~/.proxychains/proxychains.conflub w /etc/proxychains.conf.
Ewentualnie utwórz jeden plik gdziekolwiek indziej lub pod inną nazwą i określ, czy poprzez -fargument wiersza poleceń, czy poprzez PROXYCHAINS_CONF_FILEzmienną środowiskową.
Możesz wykonać tunel ssh z pola A do pola B i dodać do tabeli routingu w polu A, że strona C jest osiągalna przez tunel do skrzynki B. Musisz zezwolić na przekazywanie pakietów na polu B.
Tutaj możesz zobaczyć bardzo dobry samouczek krok po kroku ...
Będziesz musiał stworzyć tunel na maszynie B, który przekierowałby połączenie do strony C. Ale zastanawiam się, dlaczego byłoby to szybsze, chyba że twój dostawca usług internetowych stanowiłby pewne ograniczenia.
Nie znam onelinera, ale to nie jest dużo bardziej skomplikowane.
Na komputerze A robisz (losowo wziąłem 11111, możesz wziąć, co chcesz, dopóki jest to> 1024, albo musisz być rootem)
ssh -f -C -N -L 11111:C:80 username@B
Nazwa użytkownika na B jest tą, której używasz do łączenia się z B. To powinno utworzyć tunel na porcie 11111 na komputerze B, który przekierowuje do portu 80 (strona internetowa w HTTP używa 443 dla HTTPS) na komputerze C (mam nadzieję, że nie zadzwoniłem kolejność ;) )
Następnie możesz pobrać plik bezpośrednio z komputera A za pośrednictwem komputera B. Zakładam, że plik jest w, http://C/path/to/filewięc użyjesz:
Czy nie zadziałałoby to tylko wtedy, gdy plik jest dostępny bez wirtualnego hostingu opartego na nazwie HTTP 1.1? Ponieważ żądanie GET wydane przez wget podaje nazwę hosta jako B, a nie C.
CVn
@ MichaelKjörling Nie mam wystarczającej wiedzy, aby ci odpowiedzieć.
SOCKS_SERVER
zmienna środowiskowa nie ma wpływu na Ubuntu 14.04.wget
nie ma wsparcia dlaSOCKS_SERVER
zmiennej. Ta odpowiedź sugeruje użyciecurl --socks5-hostname
lubcurl --socks5
.socksify
zamiast.socksify
nie jest ustawieniem, to osobny program.SOCKS_SERVER
mieć jakikolwiek wpływwget
, musisz zainstalować ports.su/security/dante , a następnie uruchomićsocksify wget
zamiastwget
Innym podejściem może być to, że zwykle logujesz się w miejscu
B
, w którym zaczynaszscreen
sesję. Tam robiszwget
swoje pliki - wszystko w jednym katalogu.I tam program z radością może działać; po prostu odłączysz się od ekranu, ale pozwól mu działać w tle.
Jeśli pobieranie zostanie zakończone (może nawet wcześniej), możesz wybrać dane od
B
doA
używaniarsync
(moje preferencje).źródło
Zainspirowany innym odpowiedź na inne pytanie , proponuję przy użyciu proxychains-ng (która jest nowsza wersja proxychains ).
proxychains.conf
plik w bieżącym katalogu, w~/.proxychains/proxychains.conf
lub w/etc/proxychains.conf
.-f
argument wiersza poleceń, czy poprzezPROXYCHAINS_CONF_FILE
zmienną środowiskową.W swoim
proxychains.conf
pliku dodaj:Uruchom
ssh -D 1234 your_host_b
. Spowoduje to, że ssh nasłuchuje na porcie 1234 na localhost i użyje twojego zdalnego hosta jako proxy SOCKS.ssh -ND 1234 your_host_b
zamiast tego.-N
zapobiegnie uruchomieniu przez ssh dowolnej komendy na zdalnym serwerze (tzn. nie otworzy powłoki).proxychains4 yourcommandhere yourparametershere
. Zobacz kilka przykładów:proxychains4 wget -O - http://ifconfig.co/
proxychains4 -q links http://ifconfig.co/
źródło
Opcja 0:
Aby korzystać
wget
z proxy SOCKS5 zssh
, musisz zainstalowaćsecurity/dante
pakiet, aby móc korzystać zSOCKS_SERVER
opcjisocksify
narzędzia.Następnie otwierasz połączenie SSH w tle:
I użyj wget poprzez proxy SOCKS5 poprzez socksify:
Opcja 1:
Po prostu potokuj plik
stdout
na serwerze i odczytaj go zestdin
stacji roboczej.źródło
Możesz wykonać tunel ssh z pola A do pola B i dodać do tabeli routingu w polu A, że strona C jest osiągalna przez tunel do skrzynki B. Musisz zezwolić na przekazywanie pakietów na polu B.
Tutaj możesz zobaczyć bardzo dobry samouczek krok po kroku ...
źródło
Będziesz musiał stworzyć tunel na maszynie B, który przekierowałby połączenie do strony C. Ale zastanawiam się, dlaczego byłoby to szybsze, chyba że twój dostawca usług internetowych stanowiłby pewne ograniczenia.
Nie znam onelinera, ale to nie jest dużo bardziej skomplikowane.
Na komputerze A robisz (losowo wziąłem 11111, możesz wziąć, co chcesz, dopóki jest to> 1024, albo musisz być rootem)
Nazwa użytkownika na B jest tą, której używasz do łączenia się z B. To powinno utworzyć tunel na porcie 11111 na komputerze B, który przekierowuje do portu 80 (strona internetowa w HTTP używa 443 dla HTTPS) na komputerze C (mam nadzieję, że nie zadzwoniłem kolejność ;) )
Następnie możesz pobrać plik bezpośrednio z komputera A za pośrednictwem komputera B. Zakładam, że plik jest w,
http://C/path/to/file
więc użyjesz:źródło
Możesz to zrobić poprzez przekierowanie portów (tunelowanie ssh). Oto zasób: http://www.jfranken.de/homepages/johannes/vortraege/ssh2_inhalt.en.html#ToC9
Zasadniczo powinieneś skonfigurować przekierowanie portów na B. Gdy A wystawi się wget do B, B prześle pakiety do C i wyśle wyniki z powrotem do A.
źródło