it-swarm-eu.dev

Jak stáhnout soubor přes SSH server?

Mám server v USA (Linux box B) a můj domácí počítač (Linux box A) a potřebuji stáhnout soubor z webu C,

Problém je, že je velmi pomalé stáhnout soubor přímo z A, takže musím stáhnout soubor, když se přihlásím B, a sftp získat soubor z A.

Existuje nějaký způsob, jak mohu stáhnout soubor a použít B jako proxy přímo pomocí jediného řádku?

31
linjunhalida

(Zvláštní situace, nemá něco jako nerovnost trojúhelník platí pro internetové směrování?)

V každém případě zkuste na A , ssh do B = s argumentem -D,

ssh -D 1080 address-of-B

který funguje jako proxy server SOCKS5 na 127.0.0.1:1080, který může použít cokoli podporující připojení proxy serveru SOCKS5. Zdá se, že wget to může udělat pomocí proměnné prostředí

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

Všimněte si, že někdy je curl užitečnější (tj. Nejsem si jistý, zda wget může provádět vyhledávání názvů hostitelů prostřednictvím SOCKS5; ale myslím, že to není váš problém); také Firefox je schopen zcela pracovat prostřednictvím takového proxy serveru SOCKS5.

pravit ​​Právě jsem si všiml, že hledáte řešení jeden řádek. A co takhle?

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

tj. přesměrovat wget - přivedený výstup na stdout a přesměrovat místní výstup (z ssh vzdáleně wget) do souboru.

Zdá se, že to funguje, výstup wget je jen trochu matoucí (" uložen do -"), můžete se ho zbavit přidáním -q Do volání wget.

47
sr_

Dalším přístupem by mohlo být to, že se normálně přihlásíte do B, kde zahájíte relaci screen. Tam provedete wget vašich souborů - vše do jednoho adresáře.

A tam program může šťastně běžet; stačí se odpojit od obrazovky, ale nechat to běžet na pozadí.

Pokud jsou stahování dokončena (možná i dříve), můžete údaje z B do A pomocí rsync (moje preference).

3
glglgl

Možnost 0:

Abyste mohli používat wget s proxy SOCKS5 z ssh , musíte si nainstalovat security/dante balíček pro použití možnosti SOCKS_SERVER s obslužným programem socksify.

Sudo pkg_add dante

Následně otevřete připojení SSH na pozadí:

ssh -N -C -D1080 [email protected] &

A použijte wget prostřednictvím proxy serveru SOCKS5 pomocí socksify:

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

Možnost 1:

Stačí zkopírovat soubor na server stdout a načíst jej z pracovní stanice stdin.

ssh -C [email protected] "wget -O- http://website-C" >> file-from-website-C
2
cnst

Inspirován další odpověď na jinou otázk , doporučuji použít proxychains-ng (což je novější verze proxychains ).

  1. Stahujte, kompilace a volitelně nainstalujte proxychains-ng .
  2. Vytvořit proxychains.conf soubor v aktuálním adresáři nebo v ~/.proxychains/proxychains.conf nebo na /etc/proxychains.conf.
    • Alternativně vytvořte jeden soubor kdekoli jinde nebo s jiným jménem a zadejte, zda prostřednictvím -f argument příkazového řádku nebo prostřednictvím PROXYCHAINS_CONF_FILE proměnná prostředí.
    • K dispozici je kázkový konfigurační soubor . Nejrelevantnější možnosti jsou na samém konci.
  3. Ve vašem proxychains.conf, přidejte:

    [ProxyList]
    socks5 127.0.0.1 1234
    
  4. Spustit ssh -D 1234 your_Host_b. Díky tomu bude ssh poslouchat na portu 1234 na localhost a použije vzdáleného hostitele jako proxy server SOCKS.

    • Případně spusťte ssh -ND 1234 your_Host_b namísto. -N zabrání ssh ve spuštění jakéhokoli příkazu na vzdáleném serveru (tj. neotevře Shell).
  5. Spustit: proxychains4 yourcommandhere yourparametershere. Viz některé příklady:
    • proxychains4 wget -O - http://ifconfig.co/
    • proxychains4 -q links http://ifconfig.co/
2

Můžete provést tunel ssh z kolonky A do kolonky B a přidat do směrovací tabulky v kolonce A, že webová stránka C je dosažitelná tunelem do kolonky B. V kolonce B musíte povolit předávání paketů.

Zde můžete vidět velmi dobrý návod krok za krokem ...

1
Jan Marek

Budete muset vytvořit tunel na počítači B, který by přesměroval volání na web C. Ale jsem zmatený tím, proč by to bylo rychlejší, pokud váš poskytovatel internetových služeb není nějaká omezení.

Nevím, oneliner, ale to není mnohem složitější.

U počítače A to děláte (vzal jsem 11111 náhodně, můžete si vzít cokoli chcete, dokud je> 1024, nebo byste museli být root)

ssh -f -C -N -L 11111:C:80 [email protected]

Uživatelské jméno na B je to, pomocí kterého se připojujete k B. Toto by mělo vytvořit tunel na portu 11111 na počítači B, který přesměrovává na port 80 (web v HTTP používá 443 pro HTTPS) na počítači C (doufám, že jsem si nepohnul objednávka ;) )

Pak si můžete soubor stáhnout přímo ze stroje A přes stroj B. Předpokládám, že soubor je na http://C/path/to/file, takže byste použili:

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

To lze provést přesměrováním portů (ssh tunneling). Zde je zdroj: http://www.jfranken.de/homepages/johannes/vortraege/ssh2_inhalt.en.html#ToC9

V zásadě byste měli nastavit přeposílání portů na B. Když A vydá problémy s B, B předá pakety C a pošle výsledky zpět A.

1
RonE