Bagaimana cara saya memperbarui Ruby Cems dari belakang Proxy (ISA-NTLM)


232

Firewall yang saya lewati menjalankan server Microsoft ISA dalam mode khusus NTLM. Apakah ada yang berhasil mendapatkan permata Ruby untuk diinstal / diperbarui melalui permata SSPI Ruby atau metode lain?

... Atau saya hanya malas?

Catatan: rubysspi-1.2.4 tidak berfungsi.

Ini juga berfungsi untuk "igem", bagian dari proyek IronRuby


Saya sudah mendapatkan rubysspi untuk bekerja, tetapi ada banyak yang diperlukan. Jika Anda ingin menggunakannya dari cangkang Git Bash, Anda memerlukan alias yang ditambahkan ke file .bashrc Anda, seperti ini:alias gem='ruby -rspa `which gem`'
iconoclast

1
Jika Anda memiliki masalah proxy setelah melakukan langkah-langkah di sebagian besar jawaban ini, coba pastikan sudomemiliki akses ke variabel lingkungan Anda dengan menambahkan -Eswitch, misalnya,sudo -E doSomething
kayleeFrye_onDeck

Jawaban:


214

Saya tidak bisa mendapatkan pekerjaan saya dari saklar baris perintah tapi saya bisa melakukannya hanya dengan mengatur HTTP_PROXYvariabel lingkungan saya . (Perhatikan bahwa kasing tampaknya penting). Saya memiliki file batch yang memiliki garis seperti ini di dalamnya:

SET HTTP_PROXY=http://%USER%:%PASSWORD%@%SERVER%:%PORT%

Saya menetapkan empat variabel yang direferensikan sebelum saya sampai ke baris ini dengan jelas. Sebagai contoh jika nama pengguna saya adalah "wolfbyte", kata sandi saya adalah "rahasia" dan proxy saya disebut "pigsy" dan beroperasi pada port 8080:

SET HTTP_PROXY=http://wolfbyte:secret@pigsy:8080

Anda mungkin ingin berhati-hati bagaimana Anda mengelolanya karena itu menyimpan kata sandi Anda dalam teks biasa di sesi mesin, tetapi saya pikir itu tidak terlalu menjadi masalah.


6
Tampaknya 'permata' gagal mengenali backslash dalam string proxy, apakah dengan http_proxy env var atau --http-proxy argumen. misalnya dari kotak Ubuntu saya --http-proxy http: // domain \\ userid @ server: port memberi saya kesalahan: "argumen tidak valid: --http-proxy ..."; Untungnya, server proxy saya tidak memerlukan spesifikasi domain dan gem berfungsi tanpanya.
spoulson

ISA memungkinkan admin menentukan domain default untuk diautentikasi. Anda dapat mencoba untuk meninggalkan domain dan hanya menggunakan nama pengguna Anda seperti saran spoulson. Jika admin ISA Anda telah menentukan kata domain default dan akun pengguna Anda ada di domain itu, ini akan bekerja untuk Anda (dengan asumsi tidak ada aturan pemblokiran pada firewall)
squillman

11
@spoulson Anda perlu mengkode URI backslash jika Anda membutuhkan domain, mis. http: // domain% 5Cuserid @ server: port.
Ian G

13
FYI, di Windows, Anda dapat menambahkan set http_proxy baris ke gem.bat sehingga Anda tidak harus ingat untuk mengatur proxy setiap kali.
Ed Manet

1
Omong-omong, jika kata sandi Anda mengandung simbol khusus, Anda harus urlencode mereka. Misalnya ganti @dengan %40dll
Andrey Regentov

221

Untuk OS Windows, saya menggunakan Fiddler untuk mengatasi masalah ini.

  1. Instal / Jalankan Fiddler dari www.fiddler2.com
  2. Jalankan permata:

    $ gem install --http-proxy http://localhost:8888 $gem_name

3
Berhasil memperlakukan, jauh lebih mudah daripada ntlmaps dan cntlm.
atomic

36
Ini berhasil untuk saya. Perhatikan bahwa Fiddler tidak diperlukan dalam semua situasi. Hanya gem install --http-proxy http://COMPANY.PROXY.ADDRESS $gem_namesemua yang dibutuhkan untukku.
Polaris878

Pada Windows 7, --http-proxy flag harus mengikuti nama permata, mis. Permata instal <gemaname> --http-proxy yourproxy.address; port . Kalau tidak, itu akan mengeluh tentang saklar baris perintah yang tidak valid.
Alek Davis

Bekerja pada Windows 10
ggiunta

Inilah yang berhasil bagi saya di belakang proxy perusahaan. Tidak ada pemain biola yang dibutuhkan. Misalnya untuk menginstal permata jekyll jalankan: sudo gem install jekyll --http-proxy=http://web-proxy.company.com:8080
Joseph

129

Ini benar-benar berhasil:

gem install --http-proxy http://COMPANY.PROXY.ADDRESS $gem_name

15
Ini adalah jawaban yang paling mutakhir, juga bekerja dengan windows. Saya harus menambahkan nama pengguna dan kata sandi saya: permata install --http-proxy http: // [ pengguna ]: [ kata sandi ] @ [ server ]: [ port ]
vanderwyst

Saya tidak bisa menginstal jekyll dan terus mendapatkan SSL_connect SYSCALL returned=5 errno=0 state=unknown state (https://rubygems.global.ssl.fastly.net/quick/Marshal.4.8/jekyll-3.0.0.gemspec.rz). Ini bekerja untuk saya dengangem install --http-proxy http://127.0.0.1:8580 jekyll
Majid Fouladpour

Saya menambahkan alias ke profil bash saya: alias geminstall='gem install --http-proxy ${http_proxy}'untuk membuat hidup saya lebih mudah.
bgStack15

48

Saya telah menggunakan cntlm ( http://cntlm.sourceforge.net/ ) di kantor. Konfigurasi sangat mirip dengan ntlmaps.

Bekerja dengan baik, dan juga memungkinkan saya untuk menghubungkan kotak Ubuntu saya ke proksi ISA.

Lihat http://cntlm.wiki.sourceforge.net/ untuk informasi lebih lanjut


2
Ini adalah cara yang paling tidak menyakitkan dari semua yang dicoba. Di Ubuntu / Debian, saya melakukan apt-get install cntlm, edit config dan kemudian ekspor http_proxy = " localhost: 3128 ". Bekerja!
Konrads

Bekerja dengan baik di windows juga. Terima kasih!
Subrat Pattnaik

38

Saya mencoba beberapa solusi ini, dan tidak ada yang berhasil. Saya akhirnya menemukan solusi yang bekerja untuk saya:

gem install -p http://proxy_ip:proxy_port rails

menggunakan -pparameter untuk melewati proxy. Saya menggunakan Gem versi 1.9.1.


1
Dapatkan melalui instalasi dengan mengganti bagian proxy ke nama pengguna: kata sandi @ proxy_ip: proxyport
Gary Tsui

Saya harus menambahkan proxy_ipyang digunakan untuk httpskoneksi agar berfungsi! Hebat: D (versi permata 2.0.14)
madlymad

18

Buat file .gemrc (baik di / etc / gemrc atau ~ / .gemrc atau misalnya dengan chef gem di / opt / chef / embedded / etc / gemrc) yang mengandung:

http_proxy: http://proxy:3128

Maka Anda bisa gem installseperti biasa.


Jika bekerja menggunakan --http-proxytetapi tidak dengan .gemrcfile, itu mungkin berasal dari sudokonfigurasi. Saya harus memeriksa /etc/sudoersfile untuk menambahkan: Defaults env_keep = "http_proxy ftp_proxy"sebelum:Defaults env_reset
DependencyHell

16

Ini menyelesaikan masalah saya dengan sempurna:

gem install -p http://proxy_ip:proxy_port compass

Anda mungkin perlu menambahkan nama pengguna dan kata sandi Anda ke sana:

gem install -p http://[username]:[password]@proxy_ip:proxy_port compass

11

Jika Anda mengalami masalah untuk diautentikasi melalui proxy Anda, pastikan untuk mengatur variabel lingkungan dalam format yang persis seperti ini:

set HTTP_PROXY=some.proxy.com
set HTTP_PROXY_USER=user
set HTTP_PROXY_PASS=password

The user:password@sintaks tampaknya tidak bekerja dan ada juga beberapa buruk bernama variabel lingkungan beredar di Stack Overflow dan berbagai posting forum.

Perlu diketahui juga bahwa permata Anda perlu beberapa saat untuk mulai mengunduh. Pada awalnya saya pikir itu tidak berhasil tetapi dengan sedikit kesabaran mereka mulai mengunduh seperti yang diharapkan.


Mengambil tip Benjamin Wootton berhasil dengan baik pada laptop Windows 7 saya yang terhubung ke LAN perusahaan. Di jendela baris perintah pada DOS prompt saya mengatur HTTP_PROXY sebagai http: // localhost: 8888 (abaikan spasi) dan kemudian gunakan nama pengguna LAN dan Kata Sandi saya untuk HTTP_PROXY_USER dan HTTP_PROXY_PASS.
raycarr

8

Saya mencoba semua solusi di atas, namun tidak satupun yang berhasil. Jika Anda menggunakan linux / macOS, saya sangat menyarankan untuk menggunakan tsocks melalui terowongan ssh. Apa yang Anda butuhkan untuk menjalankan pengaturan ini adalah sebuah mesin di mana Anda dapat masuk melalui ssh, dan di samping itu sebuah program yang disebut tsocks diinstal.

Idenya di sini adalah untuk membuat terowongan dinamis melalui SSH (proxy socks5). Kami kemudian mengkonfigurasi tsocks untuk menggunakan terowongan ini dan untuk memulai aplikasi kami, dalam hal ini:

tsocks gem install ...

atau untuk memperhitungkan rel 3.0:

tsocks bundle install

Panduan lebih rinci dapat ditemukan di bawah:

http://blog.byscripts.info/2011/04/bypass-a-proxy-with-ssh-tunnel-and-tsocks-under-ubuntu/

Meskipun ditulis untuk Ubuntu, prosedur ini harus berlaku untuk semua mesin berbasis Unix. Alternatif untuk tsocks untuk Windows adalah FreeCap ( http://www.freecap.ru/eng/ ). Klien SSH yang layak di windows disebut dempul.


Saya menemukan artikel di cadangan saya dan baru saja menerbitkannya kembali dengan URL yang sama.
ByScripts

1
URL masih belum tersedia. Saat memberikan tautan ke situs di luar situs, situs non-Stack Exchange, rangkum bagian-bagian penting di sini dan berikan kredit ke situs itu. Dengan begitu, ketika tautan rusak, bagian penting masih ada di sini.
the Tin Man

7

Banyak tulisan mengenai topik ini, dan untuk membantu orang lain menghemat berjam-jam mencoba berbagai solusi, berikut adalah hasil akhir dari jam-jam saya bermain-main.

Tiga solusi di internet saat ini adalah: rubysspi apserver cntlm

rubysspi hanya bekerja dari mesin Windows, AFAIK, karena bergantung pada perpustakaan Win32Api. Jadi, jika Anda menggunakan kotak Windows yang mencoba menjalankan melalui proxy, ini adalah solusi untuk Anda. Jika Anda menggunakan distro Linux, Anda kurang beruntung.

apserver tampaknya merupakan proyek mati. Tautan yang tercantum dalam pos yang saya lihat mengarah ke halaman 404 di sourceforge. Saya mencari "apserver" di sourceforge tidak menghasilkan apa-apa.

Tautan sourceforge untuk cntlm yang saya lihat dialihkan ke http://cntlm.awk.cz/ , tapi itu sudah habis. Pencarian pada sourceforge menghasilkan tautan ini, yang berfungsi: http://sourceforge.net/projects/cntlm/

Setelah mengunduh dan mengkonfigurasi cntlm saya telah berhasil menginstal permata melalui proxy, jadi ini tampaknya menjadi solusi terbaik untuk distro Linux.


6

Jawaban cepat: Tambahkan konfigurasi proxy dengan parameter untuk menginstal / memperbarui

gem install --http-proxy http://host:port/ package_name

gem update --http-proxy http://host:port/ package_name

5
Saat menambahkan jawaban ke pertanyaan yang lebih lama dengan jawaban yang ada, ada baiknya menjelaskan apa yang ditambahkan jawaban Anda yang baru.
Jason Aller

untuk menentukan perintah secara langsung tanpa perincian membaca semua perincian (jawaban cepat)
Shantonu

dan, mengatur variabel lingkungan bukan merupakan pilihan untuk semua orang (ketika Anda hanya melakukan satu kali pembaruan)
Shantonu

Silakan tambahkan semua penjelasan pada jawaban itu sendiri, bukan ke bagian komentar
Nico Haase

5

Solusinya adalah memasang http://web.archive.org/web/20060913093359/http://apserver.sourceforge.net:80/ pada mesin lokal Anda, konfigurasikan dan jalankan permata melalui proxy ini.

  • Instal: Cukup unduh apserver 097 (dan bukan eksperimental 098!) Dan bongkar.
  • Konfigurasi: Edit file server.cfg dan masukkan nilai untuk proxy MS Anda di PARENT_PROXYdan PARENT_PROXY_PORT. Masukkan nilai untuk DOMAIN dan PENGGUNA. Biarkan PASSWORD kosong (tidak ada setelah titik dua) - Anda akan diminta saat meluncurkannya.
  • Jalankan apserver: cd aps097; python main.py
  • Jalankan Permata: gem install—http-proxy http://localhost:5865/ library

5
Baca di grup google bahwa 'apserver' sekarang 'Server Otorisasi NTLM'; Sayang sekali bahwa mencari yang pertama tidak mengarahkan ke yang terakhir.
Darren Bishop

Halo Jarin, saya pergi ke tautan yang Anda berikan di komentar dan tidak dapat menemukan unduhan itu. Apakah ada cara saya dapat mengunduhnya dari tempat lain?
Matrich

1
@Matrich sesuai komentar Darren. apserver sekarang berganti nama dan ditemukan di sini: ntlmaps.sourceforge.net
atomicules

4

Saya bekerja di belakang proxy dan baru saja menginstal SASS dengan mengunduh langsung dari http://rubygems.org .

Saya kemudian berlari sudo gem install [path/to/downloaded/gem/file]. Saya tidak bisa mengatakan ini akan bekerja untuk semua permata, tetapi mungkin membantu beberapa orang.


3

Ini bekerja untuk saya di kotak Windows:

set HTTP_PROXY=http://server:port
set HTTP_PROXY_USER=username
set HTTP_PROXY_PASS=userparssword
set HTTPS_PROXY=http://server:port
set HTTPS_PROXY_USER=username
set HTTPS_PROXY_PASS=userpassword

Saya memiliki file batch dengan baris ini yang saya gunakan untuk mengatur nilai lingkungan ketika saya membutuhkannya.

Triknya, dalam kasus saya, adalah HTTPS_PROXYset. Tanpa mereka, saya selalu mendapat kesalahan otentikasi proxy 407.


3

Jika Anda menggunakan sistem * nix, gunakan ini:

export http_proxy=http://${proxy.host}:${port}
export https_proxy=http://${proxy.host}:${port}

dan kemudian coba:

gem install ${gem_name}



1

Jika di belakang proxy, Anda dapat menavigasi ke unduhan Ruby , klik Unduh, yang akan mengunduh pembaruan yang ditentukan (atau Permata) ke lokasi yang diinginkan.

Selanjutnya, melalui baris perintah Ruby, navigasikan ke lokasi yang diunduh dengan menggunakan: pushd [directory]

misalnya: pushd D:\Setups

kemudian jalankan perintah berikut: gem install [update name] --local

misalnya: gem install rubygems-update --local.

Diuji pada Windows 7 dengan pembaruan Ruby versi 2.4.1.

Untuk memeriksa gunakan perintah berikut: ruby -v


1

Daripada mengedit file batch (yang mungkin harus Anda lakukan untuk permata Ruby lainnya, misalnya Bundler), mungkin lebih baik melakukan ini sekali, dan melakukannya dengan benar.

Di Windows, di belakang proksi perusahaan saya, yang harus saya lakukan adalah menambahkan HTTP_PROXYvariabel lingkungan ke sistem saya.

  1. Mulai -> klik kanan Komputer -> Properti
  2. Pilih "Pengaturan Sistem Lanjut"
  3. Klik Tingkat Lanjut -> Variabel Lingkungan
  4. Buat variabel Sistem baru bernama " HTTP_PROXY", dan tetapkan Nilai ke server proxy Anda
  5. Mulai ulang atau keluar dan kembali lagi

Bergantung pada persyaratan autentikasi Anda, HTTP_PROXYnilainya dapat sesederhana:

http://proxy-server-name

Atau lebih kompleks seperti yang ditunjukkan orang lain

http://username:password@proxy-server-name:port-number

0

untuk siapa pun yang melakukan tunneling dengan SSH; Anda dapat membuat versi gemperintah yang menggunakan proksi SOCKS:

  1. Instal socksifydengan gem install socksify(setidaknya Anda harus dapat melakukan langkah ini tanpa proxy)
  2. Salin exe permata Anda yang ada

    cp $(command which gem) /usr/local/bin/proxy_gem
  3. Buka di editor favorit Anda dan tambahkan ini di atas (setelah shebang)

    require 'socksify'
    
    if ENV['SOCKS_PROXY']
      require 'socksify'
      host, port = ENV['SOCKS_PROXY'].split(':')
      TCPSocket.socks_server = host || 'localhost'
      TCPSocket.socks_port = port.to_i || 1080
    end
  4. Siapkan terowongan Anda

    ssh -D 8123 -f -C -q -N user@proxy
  5. Jalankan perintah gem Anda dengan proxy_gem

    SOCKS_PROXY=localhost:8123 proxy_gem push mygem
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.