Saya memiliki server di AS (Linux kotak B), dan PC rumah saya (Linux kotak A), dan saya perlu mengunduh file dari situs web C,
Masalahnya adalah, sangat lambat untuk mengunduh file langsung dari A, jadi saya perlu mengunduh file ketika saya masuk B, dan sftpmendapatkan file dari A.
Apakah ada cara saya dapat mengunduh file dan menggunakan B sebagai proxy secara langsung hanya melalui satu perintah baris?
(Situasi aneh, bukankah sesuatu seperti ketidaksamaan segitiga berlaku untuk perutean internet?)
Pokoknya, coba yang berikut ini, pada A , sshke B dengan -Dargumen,
ssh -D 1080 address-of-B
yang bertindak sebagai proksi SOCKS5 127.0.0.1:1080, yang dapat digunakan oleh apa pun yang mendukung koneksi proksi SOCKS5. Ternyata, wgetbisa melakukan ini , dengan menggunakan variabel lingkungan
Perhatikan bahwa kadang-kadang curllebih berguna (yaitu saya tidak yakin apakah wgetdapat melakukan pencarian nama host melalui SOCKS5; tapi ini bukan salah satu masalah Anda, saya kira); Firefox juga dapat bekerja sepenuhnya melalui proxy SOCKS5.
Sunting Saya baru saja memperhatikan bahwa Anda sedang mencari solusi satu baris . Nah, bagaimana dengan
yaitu pengalihan wgetoutput -fetched ke stdout, dan mengarahkan output lokal (dari sshmenjalankan wgetjarak jauh) ke file.
Hal ini tampaknya kerja, wgetoutput hanya sedikit membingungkan ( " disimpan ke - "), Anda dapat menyingkirkan itu dengan menambahkan -qke wgetpanggilan.
Tampaknya SOCKS_SERVERvariabel lingkungan tidak berpengaruh pada Ubuntu 14.04.
kasperd
4
Menurut jawaban lain ini , wgettidak memiliki dukungan untuk SOCKS_SERVERvariabel. Jawaban itu menyarankan menggunakan curl --socks5-hostnameatau curl --socks5.
Denilson Sá Maia
@kasperd, jadi, apakah hanya ubuntu yang tidak berfungsi, atau variabel tidak terkait dengan wget sama sekali? tampaknya variabel yang mungkin untuk socksify.
cnst
@ cnst Saya tidak melihat bukti bahwa versi wget memiliki dukungan kaus kaki. socksifybukan pengaturan, ini adalah program yang terpisah.
kasperd
jadi, pada dasarnya, jika Anda ingin SOCKS_SERVERmemiliki efek apa pun wget, maka Anda harus menginstal ports.su/security/dante , dan kemudian jalankan socksify wgetalih-alihwget
cnst
3
Pendekatan lain bisa jadi Anda biasanya masuk B, di mana Anda memulai screensesi. Di sana Anda melakukan wgetfile Anda - semua menjadi satu direktori.
Dan di sana programnya dapat berjalan dengan senang hati; Anda baru saja lepas dari layar, tetapi biarkan berjalan di latar belakang.
Jika download selesai (mungkin) lebih awal, Anda dapat fech data dari Bke Amenggunakan rsync(preferensi saya).
Unduh, kompilasi, dan instal opsional proxy-rantai .
Buat proxychains.conffile di direktori saat ini, atau di ~/.proxychains/proxychains.conf, atau di /etc/proxychains.conf.
Atau, buat satu file di tempat lain, atau dengan nama lain, dan tentukan apakah melalui -fargumen baris perintah, atau melalui PROXYCHAINS_CONF_FILEvariabel lingkungan.
Untuk menggunakan wgetdengan proxy SOCKS5 dari ssh, Anda harus menginstal security/dantepaket untuk menggunakan SOCKS_SERVERopsi dengan socksifyutilitas.
sudo pkg_add dante
Selanjutnya, Anda membuka koneksi SSH di latar belakang:
ssh -N -C -D1080 user@hostB &
Dan gunakan wget melalui proxy SOCKS5 melalui socksify:
Anda dapat melakukan ssh tunnel dari kotak A ke kotak B dan menambahkan ke tabel routing di kotak A, bahwa situs web C dapat dicapai melalui terowongan ke kotak B. Anda harus mengizinkan penerusan paket pada kotak B.
Di sini Anda dapat melihat tutorial langkah-demi-langkah yang sangat bagus ...
Anda akan perlu membuat terowongan pada mesin B yang akan mengarahkan panggilan ke situs web C. Tapi saya bingung mengapa ini akan lebih cepat, kecuali ISP Anda membatasi.
Saya tidak tahu oneliner, tapi ini tidak jauh lebih rumit.
Pada mesin A, Anda dapat melakukannya (saya mengambil 11111 secara acak, Anda dapat mengambil apa pun yang Anda inginkan asalkan> 1024, atau Anda harus menjadi root)
ssh -f -C -N -L 11111:C:80 username@B
Nama pengguna pada B adalah yang Anda gunakan untuk terhubung ke B. Ini harus membuat terowongan pada port 11111 pada mesin B yang mengarahkan ke port 80 (situs web dalam HTTP menggunakan 443 untuk HTTPS) pada mesin C (saya harap saya tidak mengacaukan pesanan;))
Kemudian Anda dapat mengunduh file langsung dari mesin A melalui mesin B. Saya mengasumsikan file tersebut di http://C/path/to/filesehingga Anda kemudian akan menggunakan:
Bukankah ini hanya akan berfungsi jika file dapat diakses tanpa virtual hosting berbasis nama HTTP 1.1? Karena permintaan GET yang dikeluarkan oleh wget akan menyatakan nama host sebagai B, bukan C.
CVn
@ MichaelKjörling Saya tidak memiliki cukup pengetahuan untuk menjawab Anda.
Pada dasarnya, Anda harus mengatur port forwarding pada B. Ketika A mengeluarkan wget ke B, B akan meneruskan paket ke C dan mengirimkan hasilnya kembali ke A.
SOCKS_SERVER
variabel lingkungan tidak berpengaruh pada Ubuntu 14.04.wget
tidak memiliki dukungan untukSOCKS_SERVER
variabel. Jawaban itu menyarankan menggunakancurl --socks5-hostname
ataucurl --socks5
.socksify
.socksify
bukan pengaturan, ini adalah program yang terpisah.SOCKS_SERVER
memiliki efek apa punwget
, maka Anda harus menginstal ports.su/security/dante , dan kemudian jalankansocksify wget
alih-alihwget
Pendekatan lain bisa jadi Anda biasanya masuk
B
, di mana Anda memulaiscreen
sesi. Di sana Anda melakukanwget
file Anda - semua menjadi satu direktori.Dan di sana programnya dapat berjalan dengan senang hati; Anda baru saja lepas dari layar, tetapi biarkan berjalan di latar belakang.
Jika download selesai (mungkin) lebih awal, Anda dapat fech data dari
B
keA
menggunakanrsync
(preferensi saya).sumber
Terinspirasi oleh jawaban lain untuk pertanyaan lain , saya sarankan menggunakan proxychains-ng (yang merupakan versi yang lebih baru dari proxychains ).
proxychains.conf
file di direktori saat ini, atau di~/.proxychains/proxychains.conf
, atau di/etc/proxychains.conf
.-f
argumen baris perintah, atau melaluiPROXYCHAINS_CONF_FILE
variabel lingkungan.Di
proxychains.conf
file Anda , tambahkan:Lari
ssh -D 1234 your_host_b
. Ini akan membuat ssh mendengarkan pada port 1234 di localhost, dan menggunakan host jarak jauh Anda sebagai proxy SOCKS.ssh -ND 1234 your_host_b
saja.-N
akan mencegah ssh dari menjalankan perintah apa pun di server jauh (yaitu tidak akan membuka shell).proxychains4 yourcommandhere yourparametershere
. Lihat beberapa contoh:proxychains4 wget -O - http://ifconfig.co/
proxychains4 -q links http://ifconfig.co/
sumber
Opsi 0:
Untuk menggunakan
wget
dengan proxy SOCKS5 darissh
, Anda harus menginstalsecurity/dante
paket untuk menggunakanSOCKS_SERVER
opsi dengansocksify
utilitas.Selanjutnya, Anda membuka koneksi SSH di latar belakang:
Dan gunakan wget melalui proxy SOCKS5 melalui socksify:
Pilihan 1:
Cukup pipa file ke
stdout
server, dan baca daristdin
di workstation Anda.sumber
Anda dapat melakukan ssh tunnel dari kotak A ke kotak B dan menambahkan ke tabel routing di kotak A, bahwa situs web C dapat dicapai melalui terowongan ke kotak B. Anda harus mengizinkan penerusan paket pada kotak B.
Di sini Anda dapat melihat tutorial langkah-demi-langkah yang sangat bagus ...
sumber
Anda akan perlu membuat terowongan pada mesin B yang akan mengarahkan panggilan ke situs web C. Tapi saya bingung mengapa ini akan lebih cepat, kecuali ISP Anda membatasi.
Saya tidak tahu oneliner, tapi ini tidak jauh lebih rumit.
Pada mesin A, Anda dapat melakukannya (saya mengambil 11111 secara acak, Anda dapat mengambil apa pun yang Anda inginkan asalkan> 1024, atau Anda harus menjadi root)
Nama pengguna pada B adalah yang Anda gunakan untuk terhubung ke B. Ini harus membuat terowongan pada port 11111 pada mesin B yang mengarahkan ke port 80 (situs web dalam HTTP menggunakan 443 untuk HTTPS) pada mesin C (saya harap saya tidak mengacaukan pesanan;))
Kemudian Anda dapat mengunduh file langsung dari mesin A melalui mesin B. Saya mengasumsikan file tersebut di
http://C/path/to/file
sehingga Anda kemudian akan menggunakan:sumber
Anda dapat melakukan ini melalui penerusan port (ssh tunneling). Berikut ini sumber daya: http://www.jfranken.de/homepages/johannes/vortraege/ssh2_inhalt.en.html#ToC9
Pada dasarnya, Anda harus mengatur port forwarding pada B. Ketika A mengeluarkan wget ke B, B akan meneruskan paket ke C dan mengirimkan hasilnya kembali ke A.
sumber