ฉันจะอัปเดต Ruby Gems จากด้านหลังพร็อกซี (ISA-NTLM) ได้อย่างไร


232

ไฟร์วอลล์ที่ฉันใช้งานอยู่กำลังเรียกใช้เซิร์ฟเวอร์ Microsoft ISA ในโหมด NTLM-only มีใครบ้างที่ประสบความสำเร็จในการรับพลอย Ruby เพื่อติดตั้ง / อัปเดตผ่าน Ruby SSPI gem หรือวิธีการอื่น

... หรือฉันแค่ขี้เกียจ?

หมายเหตุ: rubysspi-1.2.4 ไม่ทำงาน

สิ่งนี้ใช้ได้กับ "igem" ซึ่งเป็นส่วนหนึ่งของโครงการ IronRuby


ฉันได้ rubysspi มาทำงาน แต่ก็ต้องเล่นซอเยอะ หากคุณต้องการใช้มันจาก Git Bash shell คุณจะต้องมีนามแฝงที่เพิ่มลงในไฟล์. bashrc ของคุณเช่นนี้:alias gem='ruby -rspa `which gem`'
iconoclast

1
หากคุณมีปัญหาพร็อกซีหลังจากทำตามขั้นตอนในคำตอบส่วนใหญ่แล้วให้ตรวจสอบให้แน่ใจว่าsudoมีการเข้าถึงตัวแปรสภาพแวดล้อมของคุณโดยการเพิ่ม-Eสวิตช์เช่นsudo -E doSomething
kayleeFrye_onDeck

คำตอบ:


214

ฉันไม่สามารถทำงานได้จากสวิตช์บรรทัดคำสั่ง แต่ฉันสามารถทำได้โดยการตั้งค่าHTTP_PROXYตัวแปรสภาพแวดล้อมของฉัน (โปรดสังเกตว่ากรณีนี้มีความสำคัญ) ฉันมีไฟล์แบทช์ที่มีบรรทัดแบบนี้:

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

ฉันตั้งค่าตัวแปรอ้างอิงทั้งสี่ก่อนที่จะถึงบรรทัดนี้อย่างชัดเจน ตัวอย่างเช่นหากชื่อผู้ใช้ของฉันคือ "wolfbyte" รหัสผ่านของฉันคือ "ความลับ" และพร็อกซีของฉันถูกเรียกว่า "pigsy" และทำงานบนพอร์ต 8080:

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

คุณอาจต้องระวังวิธีจัดการเพราะเก็บรหัสผ่านของคุณเป็นข้อความธรรมดาในเซสชันของเครื่อง แต่ฉันไม่คิดว่ามันจะเป็นปัญหามากเกินไป


6
ดูเหมือนว่า 'gem' ล้มเหลวในการจดจำแบ็กสแลชในสตริงพร็อกซีไม่ว่าจะด้วย http_proxy env var หรือ --http-proxy อาร์กิวเมนต์ เช่นจากกล่องอูบุนตูของฉัน --http-proxy http: // domain \\ userid @ server: พอร์ตแจ้งข้อผิดพลาด: "อาร์กิวเมนต์ไม่ถูกต้อง: --http- พร็อกซี ... "; โชคดีที่พร็อกซีเซิร์ฟเวอร์ของฉันไม่ต้องการข้อมูลจำเพาะโดเมนและไม่สามารถทำงานได้
spoulson

ISA ช่วยให้ผู้ดูแลระบบระบุโดเมนเริ่มต้นในการตรวจสอบ คุณสามารถลองออกจากโดเมนและใช้ชื่อผู้ใช้ของคุณเช่น spoulson แนะนำ ถ้าผู้ดูแลระบบ ISA คุณได้กำหนดกล่าวว่าโดเมนเริ่มต้นและ useraccount ของคุณอยู่ในโดเมนที่นี้ควรทำงานให้คุณ (สมมติว่าไม่มีการปิดกั้นกฎระเบียบเกี่ยวกับไฟร์วอลล์)
squillman

11
@spoulson คุณต้อง URI เข้ารหัสแบ็กสแลชหากคุณต้องการโดเมนเช่น http: // domain% 5Cuserid @ server: port
Ian G

13
FYI ใน Windows คุณสามารถเพิ่มบรรทัด http_proxy ที่ตั้งค่าเป็น gem.bat เพื่อที่คุณจะได้ไม่ต้องตั้งค่าพร็อกซีในแต่ละครั้ง
Ed Manet

1
อย่างไรก็ตามถ้ารหัสผ่านของคุณมีสัญลักษณ์พิเศษคุณควรใช้รหัสเหล่านั้น เช่นแทนที่@ด้วย%40ฯลฯ
Andrey Regentov

221

สำหรับระบบปฏิบัติการ Windows ฉันใช้พู้ทำเล่นเพื่อแก้ไขปัญหา

  1. ติดตั้ง / เรียกใช้ Fiddler จาก www.fiddler2.com
  2. เรียกใช้อัญมณี:

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

3
ทำงานได้ดีกว่า ntlmaps และ cntlm มาก
atomicules

36
สิ่งนี้ใช้ได้สำหรับฉัน โปรดทราบว่า Fiddler ไม่จำเป็นในทุกสถานการณ์ gem install --http-proxy http://COMPANY.PROXY.ADDRESS $gem_nameเป็นเพียงสิ่งที่ฉันต้องการ
Polaris878

บน Windows 7, ธง --http-พร็อกซี่ต้องไปหลังชื่ออัญมณีเช่นอัญมณีติดตั้ง <gemaname> --http-พร็อกซี่yourproxy.address พอร์ต มิฉะนั้นจะบ่นเกี่ยวกับสวิตช์บรรทัดคำสั่งที่ไม่ถูกต้อง
Alek Davis

ใช้งานได้กับ Windows 10
ggiunta

นี่คือสิ่งที่ใช้ได้ผลกับฉันหลังพร็อกซีขององค์กร ไม่ต้องพู้ทำเล่น ตัวอย่างเช่นการติดตั้ง jekyll gem เพียงแค่รัน: sudo gem install jekyll --http-proxy=http://web-proxy.company.com:8080
โจเซฟ

129

ทั้งหมดนี้ใช้งานได้:

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

15
นี่เป็นคำตอบล่าสุดที่ใช้ได้กับ windows ด้วย ฉันต้องเพิ่มชื่อผู้ใช้และรหัสผ่านของฉัน: gem install --http-proxy http: // [ ผู้ใช้ ]: [ รหัสผ่าน ] @ [ เซิร์ฟเวอร์ ]: [ พอร์ต ]
vanderwyst

ฉันไม่สามารถติดตั้ง Jekyll 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)และเก็บรับ สิ่งนี้ใช้ได้กับฉันด้วยgem install --http-proxy http://127.0.0.1:8580 jekyll
Majid Fouladpour

ฉันได้เพิ่มชื่อแทนในโปรไฟล์ทุบตีของฉัน: alias geminstall='gem install --http-proxy ${http_proxy}'เพื่อทำให้ชีวิตของฉันง่ายขึ้น
bgStack15

48

ฉันใช้ cntlm ( http://cntlm.sourceforge.net/ ) ที่ทำงาน การกำหนดค่าคล้ายกับ ntlmaps มาก

ใช้งานได้ดีและยังช่วยให้ฉันเชื่อมต่อกล่อง Ubuntu กับพร็อกซี ISA

ตรวจสอบhttp://cntlm.wiki.sourceforge.net/สำหรับข้อมูลเพิ่มเติม


2
นี่เป็นวิธีที่เจ็บปวดน้อยที่สุดสำหรับทุกคนที่พยายาม บน Ubuntu / Debian ฉันจะได้รับ apt-get install cntlm แก้ไขการตั้งค่าและส่งออก http_proxy = " localhost: 3128 " Works!
Konrads

ทำงานได้อย่างสมบูรณ์แบบบน windows เช่นกัน ขอบคุณ!
Subrat Pattnaik

38

ฉันลองวิธีแก้ปัญหาเหล่านี้แล้ว แต่ก็ไม่ได้ผลเลย ในที่สุดฉันก็พบวิธีแก้ปัญหาที่เหมาะกับฉัน:

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

ใช้-pพารามิเตอร์เพื่อส่งผ่านพร็อกซี ฉันใช้ Gem เวอร์ชั่น 1.9.1


1
มีการติดตั้งผ่านการแทนที่ส่วนพร็อกซีเป็นชื่อผู้ใช้: รหัสผ่าน @ proxy_ip: proxyport
Gary Tsui

ฉันต้องเพิ่มสิ่งproxy_ipที่ใช้สำหรับhttpsการเชื่อมต่อเพื่อที่จะทำงาน! ดีมาก: D (อัญมณีเวอร์ชั่น 2.0.14)
madlymad

18

สร้างไฟล์. gemrc (ใน / etc / gemrc หรือ ~ / .gemrc หรือตัวอย่างเช่น chef gem ใน / opt / chef / embedded / etc / gemrc) ที่มี:

http_proxy: http://proxy:3128

จากนั้นคุณสามารถgem installตามปกติ


ในกรณีที่ใช้งาน--http-proxyได้ แต่ไม่มี.gemrcไฟล์อาจมาจากการsudoกำหนดค่า ฉันต้องตรวจสอบ/etc/sudoersไฟล์เพื่อเพิ่ม: Defaults env_keep = "http_proxy ftp_proxy"ก่อนหน้า:Defaults env_reset
DependencyHell

16

วิธีนี้แก้ไขปัญหาของฉันได้อย่างสมบูรณ์แบบ:

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

คุณอาจต้องเพิ่มชื่อผู้ใช้และรหัสผ่านของคุณ:

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

11

หากคุณมีปัญหาในการรับรองความถูกต้องผ่านพร็อกซีของคุณโปรดตั้งค่าตัวแปรสภาพแวดล้อมในรูปแบบด้านล่าง:

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

user:password@ไวยากรณ์ดูเหมือนจะไม่ทำงานและยังมีบางชื่อไม่ดีตัวแปรสภาพแวดล้อมที่ลอยอยู่รอบ ๆ บนกองมากเกินและโพสต์ฟอรั่มต่างๆ

โปรดทราบว่าอาจใช้เวลาสักครู่เพื่อให้อัญมณีของคุณเริ่มดาวน์โหลด ตอนแรกฉันคิดว่ามันใช้งานไม่ได้ แต่ด้วยความอดทนพวกเขาเริ่มดาวน์โหลดตามที่คาดไว้


การใช้ทิปของเบนจามินวูตตันทำได้ดีมากในแล็ปท็อป Windows 7 ของฉันที่เชื่อมต่อกับ LAN ขององค์กร ในหน้าต่างบรรทัดคำสั่งที่พรอมต์ DOS ฉันตั้งค่า HTTP_PROXY เป็น http: // localhost: 8888 (ละเว้นช่องว่าง) จากนั้นใช้ชื่อผู้ใช้ LAN และรหัสผ่านสำหรับ HTTP_PROXY_USER และ HTTP_PROXY_PASS ตามลำดับ
raycarr

8

ฉันลองวิธีแก้ปัญหาทั้งหมดข้างต้นแล้ว แต่ก็ไม่มีวิธีใดที่ทำงานได้ หากคุณอยู่ใน linux / macOS ฉันขอแนะนำให้ใช้ tsocks เหนืออุโมงค์ ssh สิ่งที่คุณต้องการเพื่อให้การตั้งค่านี้ทำงานได้เป็นเครื่องที่คุณสามารถเข้าสู่ระบบผ่านทาง ssh และนอกจากนั้นโปรแกรมที่เรียกว่า tsocks ติดตั้ง

แนวคิดในการสร้างอุโมงค์แบบไดนามิกผ่าน SSH (พร็อกซี socks5) จากนั้นเรากำหนดค่า tsocks เพื่อใช้อุโมงค์นี้และเพื่อเริ่มโปรแกรมของเราในกรณีนี้:

tsocks gem install ...

หรือเพื่อบัญชีทางรถไฟ 3.0:

tsocks bundle install

คู่มือรายละเอียดเพิ่มเติมสามารถพบได้ภายใต้:

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

แม้จะถูกเขียนขึ้นสำหรับ Ubuntu ขั้นตอนควรใช้ได้กับเครื่องที่ใช้ Unix อีกทางเลือกหนึ่งสำหรับ tsocks สำหรับ Windows คือ FreeCap ( http://www.freecap.ru/eng/ ) ไคลเอ็นต์ SSH ที่ทำงานได้บน windows เรียกว่า putty


ฉันพบบทความในสำเนาสำรองของฉันและเพิ่งเผยแพร่ใหม่ด้วย URL เดียวกัน
ByScripts

1
URL ยังไม่พร้อมใช้งาน เมื่อให้ลิงก์ไปยังไซต์นอกไซต์ที่ไม่ใช่สแต็กแลกเปลี่ยนให้สรุปส่วนสำคัญ ๆ ที่นี่และให้เครดิตกับไซต์นั้น ด้วยวิธีนี้เมื่อลิงก์หยุดทำงานส่วนสำคัญยังคงอยู่ที่นี่
Tin Man

7

โพสต์มากมายเกี่ยวกับหัวข้อนี้และเพื่อช่วยให้ผู้อื่นประหยัดเวลาในการลองใช้วิธีแก้ไขปัญหาต่าง ๆ นี่คือผลลัพธ์สุดท้ายของชั่วโมงการแก้ไขของฉัน

โซลูชั่นสามรอบอินเทอร์เน็ตในขณะนี้คือ: rubysspi apserver cntlm

rubysspi ใช้งานได้จากเครื่อง Windows, AFAIK เท่านั้นเนื่องจากอาศัยไลบรารี Win32Api ดังนั้นหากคุณอยู่ในกล่อง Windows ที่พยายามเรียกใช้ผ่านพร็อกซีนี่คือทางออกสำหรับคุณ หากคุณอยู่ใน Linux distro คุณจะโชคไม่ดี

apserver ดูเหมือนจะเป็นโครงการที่ตายแล้ว ลิงค์ที่ปรากฏในโพสต์ที่ฉันเห็นนำไปสู่หน้า 404 บน sourceforge ฉันค้นหา "apserver" บน sourceforge ไม่ส่งคืนอะไร

ลิงก์ sourceforge สำหรับ cntlm ที่ฉันเคยเห็นเปลี่ยนเส้นทางไปที่http://cntlm.awk.cz/แต่หมดเวลา การค้นหาบน sourceforge จะปรากฏลิงก์นี้ซึ่งทำงาน: http://sourceforge.net/projects/cntlm/

หลังจากดาวน์โหลดและกำหนดค่า cntlm ฉันมีการจัดการเพื่อติดตั้งอัญมณีผ่านพร็อกซีดังนั้นนี่จึงเป็นทางออกที่ดีที่สุดสำหรับ Linux distros


6

คำตอบด่วน: เพิ่มการกำหนดค่าพร็อกซีพร้อมพารามิเตอร์สำหรับทั้งการติดตั้ง / อัปเดต

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

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

5
เมื่อเพิ่มคำตอบให้กับคำถามเก่าที่มีคำตอบที่มีอยู่จะเป็นประโยชน์ในการอธิบายสิ่งที่คำตอบของคุณเพิ่มซึ่งเป็นของใหม่
Jason Aller

เพื่อระบุคำสั่งโดยตรงโดยไม่มีรายละเอียดการอ่านรายละเอียดทั้งหมด (คำตอบอย่างรวดเร็ว)
Shantonu

และการตั้งค่าตัวแปรสภาพแวดล้อมไม่ใช่ตัวเลือกสำหรับทุกคน (เมื่อคุณอัปเดตครั้งเดียวเท่านั้น)
Shantonu

โปรดเพิ่มคำอธิบายทั้งหมดลงในคำตอบเองไม่ใช่ในส่วนความคิดเห็น
Nico Haase

5

วิธีแก้ปัญหาคือการติดตั้งhttp://web.archive.org/web/20060913093359/http://apserver.sourceforge.net:80/บนเครื่องท้องถิ่นของคุณกำหนดค่าและเรียกใช้อัญมณีผ่านพร็อกซีนี้

  • ติดตั้ง: เพียงดาวน์โหลด apserver 097 (ไม่ใช่รุ่นทดลอง 098!) และแกะออก
  • กำหนดค่า: แก้ไขไฟล์ server.cfg และใส่ค่าสำหรับพร็อกซี่ MS ในและPARENT_PROXY PARENT_PROXY_PORTป้อนค่าสำหรับ DOMAIN และ USER ปล่อยให้รหัสผ่านว่างเปล่า (ไม่มีอะไรหลังจากเครื่องหมายโคลอน) - คุณจะได้รับแจ้งเมื่อเปิดใช้
  • เรียกใช้ apserver: cd aps097; python main.py
  • เรียกใช้พลอย: gem install—http-proxy http://localhost:5865/ library

5
อ่านในกลุ่ม google ที่ 'apserver' เป็น 'เซิร์ฟเวอร์การอนุญาต NTLM' ในขณะนี้ ความอัปยศที่การค้นหาอดีตไม่ได้เปลี่ยนเส้นทางไปยังสิ่งหลัง
คาร์เรนบิชอป

สวัสดีจรินทร์ฉันไปที่ลิงก์ที่คุณให้ไว้ในความคิดเห็นของคุณและไม่พบการดาวน์โหลดนั้น มีวิธีใดบ้างที่ฉันสามารถดาวน์โหลดได้จากที่อื่น ๆ ?
Matrich

1
@Matrich ตามความคิดเห็นของ Darren apserver ถูกเปลี่ยนชื่อแล้วและพบได้ที่นี่: ntlmaps.sourceforge.net
atomicules

4

ฉันทำงานอยู่เบื้องหลังพร็อกซี่และเพิ่งติดตั้ง SASS โดยการดาวน์โหลดโดยตรงจากhttp://rubygems.org

sudo gem install [path/to/downloaded/gem/file]จากนั้นผมก็วิ่ง ฉันไม่สามารถพูดได้ว่าสิ่งนี้จะใช้ได้กับพลอยทุกชนิด แต่อาจช่วยได้บ้าง


3

สิ่งนี้ใช้ได้กับฉันในกล่อง 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

ฉันมีไฟล์แบตช์ที่มีบรรทัดเหล่านี้ซึ่งฉันใช้เพื่อตั้งค่าสภาพแวดล้อมเมื่อฉันต้องการ

เคล็ดลับในกรณีของฉันคือHTTPS_PROXYชุด หากไม่มีพวกเขาฉันจะได้รับข้อผิดพลาดการตรวจสอบพร็อกซี่ 407


3

หากคุณใช้ระบบ * nix ให้ใช้สิ่งนี้:

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

แล้วลอง:

gem install ${gem_name}


1

หากคุณต้องการที่จะใช้พร็อกซี่ SOCKS5 คุณอาจลอง RubyGems-socksproxy https://github.com/gussan/rubygems-socksproxy

มันใช้งานได้สำหรับฉันบน OSX 10.9.3


1

หากอยู่หลังพร็อกซีคุณสามารถไปที่การดาวน์โหลด Rubyคลิกที่ดาวน์โหลดซึ่งจะดาวน์โหลดการอัพเดตที่ระบุ (หรืออัญมณี) ไปยังตำแหน่งที่ต้องการ

ถัดไปผ่านบรรทัดคำสั่ง Ruby นำทางไปยังตำแหน่งที่ดาวน์โหลดโดยใช้: pushd [directory]

เช่น : pushd D:\Setups

จากนั้นรันคำสั่งต่อไปนี้: gem install [update name] --local

gem install rubygems-update --localเช่น:

ผ่านการทดสอบบน Windows 7 ด้วย Ruby update version 2.4.1

เพื่อตรวจสอบการใช้คำสั่งดังต่อไปนี้: ruby -v


1

แทนที่จะแก้ไขไฟล์แบตช์ (ซึ่งคุณอาจต้องทำกับพลอย Ruby อื่น ๆ เช่น Bundler) มันน่าจะดีกว่าถ้าทำแบบนี้ครั้งเดียวและทำอย่างถูกต้อง

บน Windows ด้านหลังพร็อกซีองค์กรของฉันสิ่งที่ฉันต้องทำคือเพิ่มHTTP_PROXYตัวแปรสภาพแวดล้อมให้กับระบบของฉัน

  1. เริ่ม -> คลิกขวาที่ Computer -> Properties
  2. เลือก "การตั้งค่าระบบขั้นสูง"
  3. คลิกขั้นสูง -> ตัวแปรสภาพแวดล้อม
  4. สร้างตัวแปรระบบใหม่ชื่อ " HTTP_PROXY" และตั้งค่าเป็นพร็อกซีเซิร์ฟเวอร์ของคุณ
  5. รีบูตหรือออกจากระบบและกลับมาอีกครั้ง

ขึ้นอยู่กับข้อกำหนดการรับรองความถูกต้องของHTTP_PROXYคุณค่าสามารถทำได้ง่ายเพียง:

http://proxy-server-name

หรือซับซ้อนกว่านี้ตามที่คนอื่น ๆ ได้ชี้ให้เห็น

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

0

สำหรับทุกคนที่อุโมงค์ด้วย SSH; คุณสามารถสร้างเวอร์ชันของgemคำสั่งที่ใช้พร็อกซี SOCKS ได้:

  1. ติดตั้งsocksifyด้วยgem install socksify(คุณจะต้องสามารถทำขั้นตอนนี้ได้โดยไม่ต้องใช้พรอกซีอย่างน้อย)
  2. คัดลอก exe อัญมณีที่มีอยู่ของคุณ

    cp $(command which gem) /usr/local/bin/proxy_gem
  3. เปิดในเครื่องมือแก้ไขที่คุณชื่นชอบและเพิ่มที่ด้านบน (หลัง 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. ตั้งค่าอุโมงค์ของคุณ

    ssh -D 8123 -f -C -q -N user@proxy
  5. รันคำสั่ง gem ของคุณด้วย proxy_gem

    SOCKS_PROXY=localhost:8123 proxy_gem push mygem
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.