Bir SSH sunucusu üzerinden dosya nasıl indirilir?


31

ABD'de bir sunucum var (Linux kutusu B) ve ev bilgisayarım (Linux kutusu A) ve C web sitesinden bir dosya indirmem gerekiyor.

Sorun şu ki, A'dan doğrudan bir dosya indirmek çok yavaş, bu yüzden B'ye giriş yaptığımda dosyayı indirmem ve A'dan dosya almam gerekiyor sftp.

Sadece bir satır komutuyla dosyayı indirebilir ve B'yi proxy olarak kullanabilmemin bir yolu var mı?

Yanıtlar:


46

(Garip durum, üçgen eşitsizliği gibi internet yönlendirmesi için geçerli bir şey değil mi?)

Neyse, üzerinde aşağıdakileri deneyin A , sshiçine B bir ile -Dargüman,

ssh -D 1080 address-of-B

127.0.0.1:1080SOCKS5 vekilli bağlantıları destekleyen herhangi bir şey tarafından kullanılabilecek bir SOCKS5 vekili olarak işlev görür . Görünüşe göre, wgetbunu ortam değişkenini kullanarak yapabilirsiniz.

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

Bazen curldaha kullanışlı olduğuna dikkat edin (örn. wgetSOCKS5 üzerinden ana bilgisayar adı araması yapıp yapamayacağınızdan emin değilim ; ancak bu sanırım endişelerinizden biri değil); Ayrıca Firefox böyle bir SOCKS5 proxy'si ile tamamen çalışabilir.

Düzenleme Şimdi yeni bir tek çözüm aradığınızı farkettim . Peki ya

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

- wget-çıkılan çıktının stdoutyerel çıktının yönlendirilmesi ve yerel çıktının ( uzaktan sshçalıştırılmasından wget) bir dosyaya yönlendirilmesi.

Bu, işin görünüyor wgetçıktı sadece kafa karıştırıcı küçük ( "dır - kaydedilir , sen ekleyerek ondan kurtulmak olabiliriz") -qiçin wgetçağrı.


6
Görünüşe göre SOCKS_SERVERçevre değişkeni Ubuntu 14.04 üzerinde etkili değil.
kasperd

4
Göre bu diğer cevap , wgethiçbir desteğe sahip SOCKS_SERVERdeğişken. Bu cevap curl --socks5-hostnameveya kullanmayı önerir curl --socks5.
Denilson Sá Maia

@ kasperd, bu yüzden, sadece çalışmadığı yerde ubuntu mu yoksa değişken wget ile hiç alakalı değil mi? değişkenin socksifybunun yerine olabileceği anlaşılıyor .
05

@cnst Ben herhangi bir wget sürümü çorap destek olduğuna dair hiçbir kanıt görmedim. socksifybir ayar değildir, ayrı bir programdır.
kasperd

Bu nedenle, temel olarak, eğer SOCKS_SERVERherhangi bir etki yapmak wgetistiyorsanız, ports.su/security/dante dosyasını yüklemeniz ve sonra socksify wgetyerine sadece çalıştırmanız gerekirwget
cnst

3

Başka bir yaklaşım, normalde oturum açarak oturuma Bbaşladığınız yer olabilir screen. Orada wgetdosyalarınızı yapıyorsunuz - hepsi bir dizine.

Ve orada program mutlu bir şekilde çalışabilir; sadece ekrandan ayırın, ancak arka planda çalışmasına izin verin.

İndirme bitirdiyseniz (hatta belki de daha erken) kullanarak, veri FECH olabilir Biçin Akullanarak rsync(benim tercihi).


2

Başka bir sorunun başka bir cevabından esinlenerek , proxychains-ng (ki bu yeni proxychains versiyonudur) kullanmanızı öneririm .

  1. Proxychains-ng'i indirin, derleyin ve isteğe bağlı olarak kurun .
  2. Bir oluşturma proxychains.confgeçerli dizinde veya en dosyayı ~/.proxychains/proxychains.confveya en /etc/proxychains.conf.
    • Alternatif olarak, başka bir yerde veya başka bir adda bir dosya oluşturun ve -fkomut satırı argümanıyla mı yoksa PROXYCHAINS_CONF_FILEortam değişkeni aracılığıyla mı olduğunu belirtin .
    • Mevcut bir config dosyası var. En uygun seçenekler en sonundadır.
  3. Senin içinde proxychains.confdosyaya ekleyin:

    [ProxyList]
    socks5 127.0.0.1 1234
    
  4. Run ssh -D 1234 your_host_b. Bu, ssh'nin 1234 numaralı bağlantı noktasını localhost'ta dinlemesini sağlar ve uzaktaki ana makinenizi SOCKS proxy'si olarak kullanır.

    • Alternatif olarak, ssh -ND 1234 your_host_byerine çalıştırın . -Nssh'ın uzak sunucudaki herhangi bir komutu çalıştırmasını engelleyecektir (yani bir kabuk açmaz).
  5. Çalıştırın: proxychains4 yourcommandhere yourparametershere. Bazı örneklere bakın:
    • proxychains4 wget -O - http://ifconfig.co/
    • proxychains4 -q links http://ifconfig.co/

2

Seçenek 0:

Kullanmak için wgetbir SOCKS5 proxy ile ssh, yüklemek zorunda security/dantekullanmak için paket SOCKS_SERVERile seçeneğini socksifyyardımcı programı.

sudo pkg_add dante

Daha sonra, arka planda bir SSH bağlantısı açarsınız:

ssh -N -C -D1080 user@hostB &

Ve çorap kullanarak SOCKS5 vekil aracılığıyla wget kullanın:

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

Seçenek 1:

Dosyayı stdoutsunucuya yönlendirin ve stdiniş istasyonunuzdan okuyun .

ssh -C user@hostB "wget -O- http://website-C" >> file-from-website-C

1

A kutusundan B kutusuna ssh tüneli yapabilir ve A kutusundaki yönlendirme tablosuna ekleyebilirsiniz; bu web sitesine C kutusunun B kutusundan ulaşılabilir olması gerekir.

Burada çok iyi bir adım adım öğretici görebilirsiniz ...


1

B makinesinde bir tünel oluşturmanız gerekecektir, bu da çağrıyı web sitesine C yönlendirecektir. Ancak, ISS'niz bazı kısıtlamalar olmadığı sürece bunun neden daha hızlı olacağına şaşırdım.

Oneliner bilmiyorum, ama bu daha karmaşık değil.

A makinesinde yaparsınız (Rasgele 11111 kullandım,> 1024 veya istediğin kadar alabilirsin, yoksa kök olmalısın)

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

B'deki kullanıcı adı, B'ye bağlanmak için kullandığınız addır. Bu, B makinesinde 11111 numaralı bağlantı noktasında B 80 numaralı bağlantı noktasına yönlendiren bir tünel oluşturmalıdır (HTTP'deki web sitesi HTTPS için 443 kullanın) C makinesinde (umarım karışmadım) Emir ;) )

Daha sonra dosyayı doğrudan makine A'dan B makinesiyle indirebilirsiniz. Dosyanın http://C/path/to/filekullanımda olduğunu varsayalım.

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

Bu, yalnızca dosyaya HTTP 1.1 ad tabanlı sanal barındırma olmadan erişilebiliyorsa işe yaramaz mıydı? Wget tarafından verilen GET isteği B, C olarak ana bilgisayar adını ifade olacağı için
bir CVN

@ MichaelKjörling Size cevap verecek kadar bilgim yok.
Huygens

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.