Bắt Git hoạt động với máy chủ proxy - không thành công với Yêu cầu đã hết thời gian


918

Làm cách nào để Git sử dụng máy chủ proxy?

Tôi cần kiểm tra mã từ máy chủ Git, nhưng nó hiển thị "Yêu cầu đã hết thời gian" mỗi lần. Làm thế nào để tôi có được xung quanh này?

Ngoài ra, làm cách nào tôi có thể đặt máy chủ proxy?


Đây sẽ không phải là một mục cấu hình máy khách git? Khía cạnh duy nhất của điều này có vẻ như liên quan đến cmd.exe là ứng dụng khách git có thể cho phép bạn chỉ định proxy trong một biến môi trường.
Michael Burr

Tôi đã chỉnh sửa câu hỏi ban đầu để xóa tất cả các tham chiếu của Windows, vì vấn đề này là đặc thù git mỗi se.
Bệnh dịch hạch

3
Lưu ý rằng bạn sẽ có thể thiết lập proxy cho mỗi url repo git!
VonC


3
Hầu hết các câu trả lời trong câu hỏi này đều thuộc về proxy HTTP. Nếu bạn có một proxy SOCKS, xem câu hỏi này cho HTTP / S giao thứcmột này cho git: // giao thức.
người dùng

Câu trả lời:


1634

Lệnh sử dụng:

git config --global http.proxy http://proxyuser:proxypwd@proxy.server.com:8080
  • thay đổi proxyuserngười dùng proxy của bạn
  • thay đổi proxypwdmật khẩu proxy của bạn
  • thay đổi proxy.server.comURL của máy chủ proxy của bạn
  • thay đổi 8080cổng proxy được định cấu hình trên máy chủ proxy của bạn

Lưu ý rằng điều này hoạt động cho cả repos http và https.

Nếu bạn quyết định bất cứ lúc nào để đặt lại proxy này và hoạt động mà không cần proxy:

Lệnh sử dụng:

git config --global --unset http.proxy

Cuối cùng, để kiểm tra proxy hiện được đặt:

git config --global --get http.proxy

15
Cảm ơn Salim. Của tôi làm việc mà không cần proxyuser: proxypwd trong URL.
Kwex

11
Cảm ơn các bạn. Đối với tôi, đó là xác thực dựa trên NTLM và chỉ cập nhật .gitconfig của tôi không hoạt động :(. Vì vậy, tôi phải lấy CNTLM sử dụng quyền xác thực NTLM. Tất cả những gì tôi phải làm là chỉ CNTLM của mình vào máy chủ proxy của mạng và sau đó trỏ phần mềm của tôi Trình quản lý cập nhật (như yum, apt-get hoặc ssh) sang proxy cục bộ. Trong trường hợp các thao tác git như clone, hãy kéo http.proxy là proxy được định cấu hình cục bộ của tôi với máy chủ cục bộ.
Mayur Nagekar

9
Xin chào, làm cách nào tôi có thể đặt proxypass nếu nó có ký tự "@"? Tôi biết tôi phải đánh lừa nhân vật này nhưng tôi không biết làm thế nào .. Cảm ơn bạn
patricK

13
@patricK Bạn có thể sử dụng %40thay thế cho @chuỗi tên người dùng / mật khẩu, mặc dù tôi chưa tự mình kiểm tra điều này. Hy vọng nó giúp. :-)
Sourav Ghosh

14
@patricK Tôi có thể xác nhận rằng sử dụng% 40 thay thế cho @ công trình. Có vẻ như nếu một ký tự đặc biệt không hoạt động, bạn nên thử mã hóa URL. Các bảng mã được tìm thấy ở đây: w3schools.com/tags/ref_urlencode.asp
Jon

133

Điều này làm việc cho tôi, trong windows XP đằng sau một tường lửa công ty.

Tôi không phải cài đặt bất kỳ proxy cục bộ hoặc bất kỳ phần mềm nào khác ngoài git v1.771 từ http://code.google.com.vn/p/msysgit/doads/list?can=3

$ git config --global http.proxy http://proxyuser:proxypwd@proxy.server.com:8080
$ git config --system http.sslcainfo /bin/curl-ca-bundle.crt
$ git remote add origin https://mygithubuser:mygithubpwd@github.com/repoUser/repoName.git
$ git push origin master

proxyuser = người dùng proxy mà tôi được chỉ định bởi bộ phận CNTT của chúng tôi, trong trường hợp của tôi, đó là cùng một người dùng windows tôi sử dụng để đăng nhập vào PC của tôi, người dùng Active Directory

proxypwd = mật khẩu của người dùng proxy của tôi

proxy.server.com:8080 = tên và cổng proxy, tôi đã nhận nó từ Bảng điều khiển, Tùy chọn Internet, Kết nối, nút Cài đặt Lan, nút Nâng cao bên trong phần Máy chủ proxy, sử dụng tên máy chủ và cổng trên hàng (http) đầu tiên .

mygithubuser = người dùng tôi sử dụng để đăng nhập vào github.com

mygithubpwd = mật khẩu cho người dùng github.com của tôi

repoUser = chủ sở hữu người dùng của repo

repoName = tên của repo


2
Hoan hô, cảm ơn! git config --global http.sslcainfo MY_NEW_CERTS_BUNDLE.crtcộng với các chứng chỉ được tải xuống như được mô tả trong Simplicidade.org/notes/archives/2011/06/ trên (cảm ơn: stackoverflow.com/a/7206627/98528 ) đã làm điều đó cho tôi!
akavel

3
Có vẻ như hoạt động với tôi, nhưng git vẫn không hoạt động khi tôi yêu cầu nó sao chép một kho lưu trữ bằng git://giao thức.
Ajedi32

3
Một vài cách làm rõ thông tin của pottaolic, dựa trên những gì hiệu quả với tôi: 1) Nếu proxyuser là thông tin đăng nhập Windows, hãy bỏ qua miền AD, chỉ bao gồm tên người dùng không có tên miền; 2) Không gian trong proxypwd phải được mã hóa thành "+". ví dụ: "Mật khẩu của tôi" phải được nhập là "Mật khẩu + của tôi".
Simon Tewsi

2
@ EdmundYeung99: Tôi khuyên bạn nên thay thế biểu tượng @ bằng% 40. Chưa thử nhưng tôi tin rằng đó là mã hóa URL tiêu chuẩn.
Simon Tewsi

2
@demongolem: Tôi nghi ngờ bạn có thể cần URL mã hóa mật khẩu của mình (chưa thử, đây chỉ là một phỏng đoán có giáo dục). Xem cột UrlEncoding trong bảng trong câu trả lời sau: stackoverflow.com/a/11236038/216440 Trong trường hợp của bạn, điều đó có nghĩa là thay thế $ bằng% 24.
Simon Tewsi

52

Đặt một biến hệ thống được đặt tên http_proxyvới giá trị của ProxyServer:Port. Đó là giải pháp đơn giản nhất. Tôn trọng, sử dụng https_proxynhư daefu chỉ ra trong các ý kiến.

Đặt gitproxy (như sleske đề cập) là một tùy chọn khác, nhưng yêu cầu "lệnh", không đơn giản như giải pháp trên.

Tài liệu tham khảo: http://bardofschool.blogspot.com/2008/11/use-git-behind-proxy.html


10
Hoặc sử dụng 'https_proxy' nếu bạn đang kết nối với kho lưu trữ https.
daefu

1
@daefu: Không chắc chắn nếu bạn cần đặt https_proxy. Tôi đã kết nối với kho lưu trữ https và làm theo bước đầu tiên của hướng dẫn của pottaolic (tức là thêm http.proxy vào tệp cấu hình git). Đó là tất cả những gì nó làm cho tôi.
Simon Tewsi

3
https_proxy là bắt buộc đối với tôi. Chỉ thiết lập http_proxy không cho phép nó sao chép một repo HTTPS
khám phá

@daefu +1 cái này cũng hoạt động với góa phụ github - câu hỏi liên quan: stackoverflow.com/questions/16216176/
blue-sky

4
@SimonTewsi @explunit Trong khi cài đặt các biến môi trường http_proxylà bắt buộc đối với URL HTTP và https_proxyđược yêu cầu cho URL HTTPS. Ngoài ra, người ta chỉ có thể đặt all_proxycho tất cả các URL. Xem ENVIRONMENTphần trong curl (1) . Tuy nhiên, trong khi đặt tùy chọn git-config, http.proxyđược sử dụng cho cả URL HTTP và HTTPS. Xem http.proxytrong git-config (1) .
Susam Pal

43

Nếu cách cấu hình dòng lệnh máy chủ proxy của bạn không hoạt động, có lẽ bạn chỉ cần chỉnh sửa .gitconfig (trong thư mục gốc của hồ sơ, có thể ẩn cả trong C: \ Documents and Settings và trên một số ổ đĩa mạng) và thêm điều này :

[http]
    proxy = http://username:password@proxy.at.your.org:8080

YMMV mặc dù, điều này chỉ bao gồm bước đầu tiên của cấu hình dòng lệnh. Bạn có thể phải chỉnh sửa cấu hình git hệ thống quá và tôi không biết họ đã giấu nó ở đâu.


1
"Bạn cũng có thể phải chỉnh sửa cấu hình git hệ thống". Không, thường là không. Cấu hình hệ thống và người dùng được kết hợp; thiết lập proxy ở một trong hai là đủ.
sleske

Trong trường hợp của tôi, nó nằm trên máy Windows của tôi trong [git home] \ etc \ gitconfig - sau khi chỉnh sửa, nó hoạt động như một bùa mê!
Sao đỏ Barmaley

Điều này đặc biệt hữu ích nếu dòng lệnh không thích mật khẩu của bạn do các ký tự đặc biệt.
Xuất xứ

37

Thay thế cho việc sử dụng git config --global http.proxy address:port, bạn có thể đặt proxy trên dòng lệnh:

git -c "http.proxy=address:port" clone https://...

Ưu điểm là proxy không được thiết lập liên tục. Trong Bash bạn có thể đặt bí danh:

alias git-proxy='git -c "http.proxy=address:port"'

22

Nếu bạn đang sử dụng Ubuntu, thì hãy làm như sau ...

Bước 1: Cài đặt nút chai

$ sudo apt-get install corkscrew

Bước 2: Viết một tập lệnh có tên git-proxy.sh và thêm đoạn mã sau

#!/bin/sh

exec corkscrew <name of proxy server> <port> $*

# <name_of_proxy_server> and <port> are the ip address and port of the server
# e.g. exec corkscrew 192.168.0.1 808 $*

Bước 3: Làm cho tập lệnh thực thi

$ chmod +x git-proxy.sh

Bước 4: Thiết lập lệnh proxy cho GIT bằng cách đặt biến môi trường

$ export GIT_PROXY_COMMAND="/<path>/git-proxy.sh"

Bây giờ sử dụng các lệnh git, chẳng hạn như

git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git

Bạn có lẽ nên sử dụng "$@"thay vì $*. Xem hướng dẫn sử dụng vỏ của bạn để biết thêm chi tiết.
Hynek -Pichi- Vychodil

15

Đối mặt với cùng một vấn đề vì có nhiều .gitconfigtệp trong windows, hãy làm theo các bước dưới đây để khắc phục giống nhau:

Bước 1: Mở GASH BASH

Bước 2: Tìm kiếm .gitconfig, thực hiện lệnh sau:

git config --list --global --show-origin

Bước 3: Sao chép nội dung dưới đây trong .gitconfig:

[http]
    proxy = http://YOUR_PROXY_USERNAME:YOUR_PROXY_PASSWORD@YOUR.PROXY.SERVER:YOUR.PROXY.SERVER.PORT
    sslverify = false
[https]
    proxy = http://YOUR_PROXY_USERNAME:YOUR_PROXY_PASSWORD@YOUR.PROXY.SERVER:YOUR.PROXY.SERVER.PORT
    sslverify = false
[url "http://github.com/"]
    insteadOf = git://github.com/

[user]
    name = Arpit Aggarwal
    email = aggarwalarpit.89@gmail.com

12

Hãy thử đặt phần sau vào tệp ~ / .gitconfig:

[http]
    proxy = http://proxy:8080
[https]
    proxy = http://proxy:8080
[url "https://"]
    insteadOf = git://

1
Tôi đã thử tất cả những thứ ở trên. Mãi đến khi tôi thêm mục https được liệt kê ở đây thì tôi mới có thể làm việc.
Brent Fisher

11

Đối với giao thức git (git: // ...), hãy cài đặt socat và viết một tập lệnh như:

#!/bin/sh

exec socat - socks4:your.company.com:$1:$2

làm cho nó có thể thực thi được, đặt nó vào đường dẫn của bạn và trong ~/.gitconfigtập hợp của bạn thành core.gitproxytên của tập lệnh đó.


Hoạt động cho các cửa sổ với SOCAT của Cygwin quá. sử dụngsocat STDIO PROXY:%proxy%:%1:%2,proxyport=%PROXYPORT%
davenpcj

1
Có thể sử dụng set GIT_PROXY_COMMAND=path\to\scriptđể làm cho GIT sử dụng proxy mà không gây rối với cấu hình git.
davenpcj

Đúng! Cuối cùng là gợi ý đúng! Tôi cũng cần xác thực: exec socat STDIO PROXY: <proxy>: $ 1: $ 2, proxyport = <port>, proxyauth = <user>: <passwd> Tìm thấy ở đây: gist.github.com/sit/49288
Joachim

11

Có một cái gì đó tôi nhận thấy và muốn chia sẻ ở đây:

git config --global http.proxy http://<proxy address>:<port number>

Phương pháp trên sẽ không hoạt động đối với URL ssh (nghĩa là git@github.com:<user name>/<project name>.git):

git clone git@github.com:<user name>/<project name>.git // will not use the http proxy

Và mọi thứ sẽ không thay đổi nếu chúng tôi đặt SSH qua cổng HTTPS ( https://help.github.com/en/articles/USE-ssh-over-the-https-port ) vì nó chỉ thay đổi cổng (22 theo mặc định ) kết nối ssh kết nối với.

(Không phải là người nói tiếng Anh bản ngữ, vui lòng tinh chỉnh các từ của tôi nếu cần thiết)


7

Tôi làm việc trên Windows XP tại nơi làm việc (bang / gov), vì vậy tôi đã nghiên cứu và tìm thấy nó ở đây và nó hoạt động với tôi. Hi vọng điêu nay co ich :)

Biến môi trường http_proxy

Nếu bạn sử dụng máy chủ proxy hoặc tường lửa, bạn có thể cần đặt biến môi trường http_proxy để truy cập một số url từ dòng lệnh. Ví dụ: Cài đặt ppm cho perl hoặc áp dụng vòng / phút trong linux, cập nhật ubfox

Đặt biến http_proxy với tên máy chủ hoặc địa chỉ IP của máy chủ proxy: http_proxy = http: // [proxy.example.org]

Nếu máy chủ proxy yêu cầu tên người dùng và mật khẩu, hãy bao gồm chúng theo mẫu sau: http_proxy = http: // [username: password@proxy.example.org]

Nếu máy chủ proxy sử dụng một cổng khác 80, bao gồm số cổng: http_proxy = http: // [tên người dùng: password@proxy.example.org: 8080]

Windows XP

  1. Mở Bảng điều khiển và nhấp vào biểu tượng Hệ thống.
  2. Trên tab Nâng cao, bấm vào Biến môi trường.
  3. Bấm Mới trong bảng Biến hệ thống.
  4. Thêm http_proxy với thông tin proxy phù hợp (xem ví dụ ở trên).

Linux, Solaris hoặc HP-UX

Đặt biến môi trường http_proxy bằng lệnh cụ thể cho trình bao của bạn (ví dụ: đặt hoặc xuất). Để thực hiện thay đổi này liên tục, hãy thêm lệnh vào tệp hồ sơ thích hợp cho trình bao. Ví dụ: trong bash, hãy thêm một dòng như sau vào tệp .bash_profile hoặc .bashrc của bạn:

  1. http_proxy = http: // [tên người dùng: mật khẩu @ tên máy chủ: cổng];
  2. xuất $ http_proxy

tanx -> :) C: \ Users \ AT> echo% https_proxy% 172.20.4.55:808
qasem

7

Ngoài câu trả lời, tôi thấy hữu ích khi xem xét 2 điểm sau:

Người ta có thể cần phải thực thi một chương trình xác thực:

[http]
    # https://github.com/git/git/blob/master/Documentation/config.txt
    proxyAuthMethod = anyauth|basic|digest|negotiate|ntlm

Ngoài ra, thông thường với lược đồ xác thực NTLM, người ta có thể cần cung cấp rõ ràng miền AD.

Trong git bash:

echo %userdomain%

Và cập nhật http.proxy phù hợp:

git config --global http.proxy http://DOMAIN\\proxyuser:proxypwd@proxy.server.com:8080

Dù sao, điều tra có thể được giúp đỡ bằng cách thêm nhật ký CURL:

export GIT_CURL_VERBOSE=1

Tôi cần thêm proxyAuthMethod bằng cách sử dụng git config --global http.proxyAuthMethod basic. Git gersion 2.8.3 đã không gửi bất kỳ xác thực nào cho đến khi tôi đặt tham số cấu hình này.
HeatfanJohn

5

Nếu bạn có tsocks hoặc proxychains cài đặt và cấu hình, bạn có thể

$ tsocks git clone <you_repository>

hoặc là

$ proxychains git clone <you_repository>

để làm cho nó ngắn hơn, tôi đã tạo một liên kết biểu tượng /usr/bin/pcho proxychains, vì vậy tôi có thể sử dụng nó như thế này

p git clone <you_repository>

và tôi có thể sử dụng nó để ủy quyền bất kỳ lệnh nào,

p <cmd-need-be-proxied>

Nhân tiện, proxychains không được cập nhật trong một thời gian dài, bạn có thể muốn thử proxychians-ng


4

Đặt proxy git trên thiết bị đầu cuối

nếu

  • bạn không muốn đặt proxy cho từng dự án git của mình theo cách thủ công, từng cái một
  • luôn muốn sử dụng cùng một proxy cho tất cả các dự án của bạn

Đặt nó trên toàn cầu một lần

git config --global http.proxy username:password@proxy_url:proxy_port
git config --global https.proxy username:password@proxy_url:proxy_port

nếu bạn muốn đặt proxy chỉ cho một dự án git (có thể có một số trường hợp bạn không muốn sử dụng cùng một proxy hoặc bất kỳ proxy nào cho một số kết nối git)

//go to project root
cd /bla_bla/project_root
//set proxy for both http and https
git config http.proxy username:password@proxy_url:proxy_port
git config https.proxy username:password@proxy_url:proxy_port

nếu bạn muốn hiển thị các cài đặt proxy hiện tại

git config --list 

nếu bạn muốn xóa proxy trên toàn cầu

git config --global --unset http.proxy
git config --global --unset https.proxy

nếu bạn muốn xóa proxy chỉ với một gốc git

//go to project root
cd /bla-bla/project_root
git config --unset http.proxy
git config --unset https.proxy

3

đây là cài đặt proxy

git config --global http.proxy http://<username>:<pass>@<ip>:<port>
git config --global https.proxy http://<username>:<pass>@<ip>:<port>

3

Tôi đã làm theo hầu hết các câu trả lời được đề nghị ở đây. Đầu tiên tôi gặp lỗi sau:

gây tử vong: không thể truy cập ' https://github.com/folder/sample.git/ ': schannel: next InitializeSecurityContext không thành công: Lỗi không xác định (0x80092012) - Chức năng hủy bỏ không thể kiểm tra việc thu hồi chứng chỉ.

Sau đó, tôi đã thử lệnh sau bởi @Salim Hamidi

git config --global http.proxy http://proxyuser:proxypwd@proxy.server.com:8080

Nhưng tôi đã nhận được lỗi sau:

gây tử vong: không thể truy cập ' https://github.com/folder/sample.git/ ': Đã nhận được mã HTTP 407 từ proxy sau CONNECT

Điều này có thể xảy ra nếu máy chủ proxy không thể xác minh chứng chỉ SSL. Vì vậy, chúng tôi muốn đảm bảo rằng xác minh ssl bị tắt (không được đề xuất cho các trang web không đáng tin cậy), vì vậy tôi đã thực hiện các bước sau được @Arpit khuyến nghị nhưng với một số thay đổi nhỏ:

1.Đầu tiên đảm bảo xóa mọi cài đặt proxy trước đó:

git config --global --unset http.proxy

2.Sau đó liệt kê và nhận nội dung gitconfig

git config --list --show-origin

3. Cập nhật nhanh nội dung của tệp gitconfig như sau:

[http]
sslCAInfo = C:/yourfolder/AppData/Local/Programs/Git/mingw64/ssl/certs/ca-bundle.crt
sslBackend = schannel
proxy = http://proxyuser:proxypwd@proxy.server.com:8080
sslverify = false
[https]
proxy = http://proxyuser:proxypwd@proxy.server.com:8080
sslverify = false

3

Tôi đã thử tất cả các câu trả lời ở trên và không có gì hiệu quả với tôi, vì có vấn đề mã hóa mật khẩu proxy.

Lệnh này đã làm việc:

git config --global http.proxy http://username@proxy.example.com:PortNumber 

Không nhập mật khẩu trong lệnh của bạn. Nó sẽ tự động yêu cầu khi bạn cố gắng kết nối với bất kỳ repo git nào.


Cảm ơn, điều này đã làm việc cho tôi. Mặc dù cài đặt cấu hình git phải là http.proxy
ochhii

Tên người dùng là không đủ. Mật khẩu cũng được yêu cầu.
Dinith

sử dụng mã này {git config --global http.proxy proxyuser: proxypwd@proxy.server.com: 8080 }
Dinith 21/11/19

2

Đối với người dùng windows: nếu git confighoặc set http_proxy=không hoạt động, câu trả lời này có thể giúp:

thay thế git://giao thức của kho git bằng http://. Lưu ý, bạn sẽ phải đặt http_proxyđầu tiên, dù sao đi nữa.


0

Sau khi thử không mệt mỏi mọi giải pháp trên trang này, công việc của tôi là sử dụng và khóa SSH thay thế!

  1. Mở Git Bash
  2. $ ssh-keygen.exe -t rsa -C
  3. Mở nhà cung cấp Git của bạn (Github, Bitbucket, v.v.)
  4. Thêm sao chép nội dung tệp id_rsa.pub vào trang đầu vào của nhà cung cấp Git (kiểm tra hồ sơ của bạn)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.