2013-03-01 35 views
8

Tôi đằng sau một proxy công ty đó là khá khó chịu:Làm thế nào để sao chép từ github từ phía sau proxy công ty

  1. Các địa chỉ proxy thực tế sử dụng được xác định bởi một kịch bản
  2. Nó đòi hỏi xác thực
  3. thay thế chứng chỉ của các trang web bằng cách sử dụng HTTPS

Làm cách nào để sao chép thành công kho lưu trữ github trong trường hợp này?

Trả lời

10
  1. Vấn đề đầu tiên không thực sự liên quan đến git - nhiều hơn là bước cần thiết để có thể định cấu hình proxy.
    Cấu hình proxy trên máy tính Windows có thể được tìm thấy tại Pa-nen điều khiển -> Tùy chọn Internet -> Kết nối -> Cài đặt mạng LAN.
    Nếu "Sử dụng tập lệnh cấu hình tự động" được chọn, trước tiên bạn cần tải xuống tệp đã chỉ định và mở tệp đó. Tôi có một tập tin chứa một tập lệnh nhỏ. Nó trông giống như sau:

    function FindProxyForURL(url, host) 
    { 
        var myip = myIpAddress(); 
        var hostip = dnsResolve(host); 
        if (isInNet(hostip,"192.168.0.0","255.255.0.0")) 
         return "DIRECT"; 
        if (isInNet(hostip,"xyz.abc.0.0","255.255.0.0")) 
         return PROXY special-proxy:8080; 
        return "PROXY default-proxy:8080"; 
    } 
    

    Vì vậy, trong trường hợp của tôi, proxy được sử dụng là default-proxy:8080.

  2. Để thực sự có được git sử dụng proxy, tôi phải sử dụng git config --global http.proxy http://<domain>\<username>:<password>@default-proxy:8080.

    Nhược điểm rõ ràng với điều này là bạn sẽ có mật khẩu miền được lưu trữ dưới dạng văn bản thuần trên đĩa cứng.

    Các cài đặt khác không hoạt động, mặc dù các nguồn khác nhau yêu cầu. Đó là:

    1. Thiết lập biến môi trường https_proxy hoặc http_proxy-http://<domain>\<username>:<password>@default-proxy:8080
    2. Thiết lập git config toàn cầu để giá trị đó: git config --global https.proxy http://<domain>\<username>:<password>@default-proxy:8080
    3. Thiết lập biến môi trường http_proxy để http://<domain>\<username>:<password>@default-proxy:8080
  3. Để có được xung quanh vấn đề thứ ba, khả năng đơn giản nhất là bỏ qua các lỗi chứng chỉ bằng cách thiết lập một biến môi trường - các chứng chỉ trả về bởi proxy không đáng gì cả:

    set GIT_SSL_NO_VERIFY=true 
    

Để không lưu trữ các mật khẩu đơn giản trong cấu hình git, bạn có thể sử dụng một proxy địa phương thay vào đó, ví dụ cntlm.

Nó cho phép lưu trữ băm mật khẩu thay thế. Để lấy hàm băm, sử dụng lệnh này:

cntlm.exe -H -d <domain> -u <username> 

Sau đó, bạn sẽ được nhắc nhập mật khẩu. Kết quả sẽ là danh sách ba băm, trong đó PassNTLMv2 rất có thể là danh sách liên quan trong trường hợp này. Thay thế dòng Password trong cntlm.ini bằng dòng từ đầu ra, bao gồm cả phần PassNTLMv2.

Rõ ràng, bạn phải định cấu hình git để sử dụng proxy cục bộ này thay thế, ngay bây giờ.

+0

+1, cảm ơn bạn đã chia sẻ! – CharlesB

+0

Cảm ơn bạn, đây là giải pháp duy nhất hoạt động! Tôi không biết rằng tập lệnh cấu hình tự động sẽ được tải xuống dưới dạng tệp. Một điều tôi nên đề cập đến - nếu ký tự băm (#) xuất hiện ở bất kỳ đâu trong : , nó sẽ không hoạt động, vì git sẽ giải thích mọi thứ qua nó làm nhận xét. – Boris

1

Nếu bạn cũng muốn viết quyền truy cập vào github, bạn sẽ phải có khả năng truy cập ssh vào github thông qua proxy. Để thực hiện việc này, bạn có thể sử dụng corkscrew.

Nói tóm lại đây là cách bạn làm điều này:
Đầu tiên giải nén corkscrew
Sau đó tạo một tập tin trong ~/.ssh/proxy_auth chứa <proxy_username>:<proxy_password>
Bây giờ nói với ssh để sử dụng corkscrew để truy cập github.com qua proxy bằng cách thêm dòng sau vào ~/.ssh/config:

host github.com 
    port 22 
    proxycommand corkscrew <proxy_ip_address> <proxy_port> %h %p ~/.ssh/myauth 

Bây giờ kiểm tra xem ssh có thể truy cập proxy bằng ssh -T [email protected] hay không. Nếu cách này hoạt động, giao thức git:/ cũng sẽ có thể truy cập thông qua proxy.

+0

Tại sao bạn không chỉ cần nhấn với http? –

+0

Không có ý tưởng, tôi chỉ có thể đẩy thông qua proxy công ty của tôi qua giao thức ssh. – Steven

Các vấn đề liên quan