Ký tự thoát @ trong mật khẩu git proxy


89

Tôi có cấu hình proxy git là 'http.proxy = http: // userId: pwd @ 123 @ipaddress: port' nhưng trong khi nhân bản một dự án từ xa, tôi gặp lỗi như

Cloning into git...
error: Couldn't resolve proxy '123@ipaddress' while accessing http://git.kernel.org/pub/scm/git/git.git/info/refs

fatal: HTTP request failed

Làm cách nào để thoát ký tự '@' trong mật khẩu?

Xin lưu ý: Tôi không thể thay đổi mật khẩu.

Câu trả lời:


158

Tôi sẽ thử sử dụng giá trị được Mã hóa URL của ký hiệu @ ( %40) nếu bạn đang chuyển mật khẩu trong url proxy:

http.proxy=http://userId:pwd%40123@ipaddress:port

3
Tôi đang cố gắng thực hiện thủ thuật tương tự nhưng với 'git clone user: pwd% 40123 @ ip: port ' và nó không hoạt động. Vì vậy, tôi đoán git không sử dụng curl trong tình huống này?
Joseph Garvin

thú vị ... không chắc. Có lẽ đáng để thử xem những gì thực sự được gửi qua dây trong trường hợp này.
John Weldon

1
Điều này đã giúp tôi. Bạn nên mã hóa url riêng biệt cả phần tên và mật khẩu. Điều này sẽ giúp bạn tránh mọi vấn đề với các ký tự đặc biệt. Ví dụ có thể có dấu ":" cũng sẽ dẫn đến vấn đề.
Stalinko

2
Điều này cũng tuyệt vời khi bạn có '@' trong tên người dùng, ví dụ như khi bạn có địa chỉ email làm tên người dùng.
ramdesh

Cảm ơn bạn rất nhiều vì đã giải quyết vấn đề của tôi sau hai ngày vật lộn ... thực sự rất khó để tìm ra lý do cho loại vấn đề này.
lleiou

62

Lưu ý (tháng 11 năm 2013)

Mã hóa url (đặc biệt là bất kỳ ký tự đặc biệt nào trong mật khẩu) là giải pháp phù hợp.
Nội dung .netrcđược đề cập bên dưới chỉ dành cho url repo từ xa, không dành cho proxy được sử dụng để giải quyết url repo từ xa nói trên.

Đối với mã hóa đã nói, hãy xem " Mã hóa phần trăm ":

Mã hóa phần trăm, còn được gọi là mã hóa URL , là một cơ chế để mã hóa thông tin trong Mã định danh tài nguyên thống nhất (URI) trong một số trường hợp nhất định. Mặc dù nó được gọi là mã hóa URL, nhưng trên thực tế, nó được sử dụng phổ biến hơn trong bộ Định danh tài nguyên đồng nhất (URI) chính, bao gồm cả Bộ định vị tài nguyên đồng nhất (URL) và Tên tài nguyên đồng nhất (URN). Do đó, nó cũng được sử dụng trong việc chuẩn bị dữ liệu của loại phương tiện ứng dụng / x-www-form-urlencoded , như thường được sử dụng trong việc gửi dữ liệu biểu mẫu HTML trong các yêu cầu HTTP .

Các ký tự dành riêng sau mã hóa phần trăm:

!   #   $    &   '   (   )   *   +   ,   /   :   ;   =   ?   @   [   ]
%21 %23 %24 %26 %27 %28 %29 %2A %2B %2C %2F %3A %3B %3D %3F %40 %5B %5D

Câu trả lời gốc (tháng 5 năm 2011)

Hai nhận xét:

  • có một mật khẩu cho một máy chủ truy cập bằng http (không phải https) là ... lạ. Mật khẩu không được mã hóa trong quá trình giao tiếp giữa máy khách và máy chủ;

  • bạn có thể thiết lập một .netrc(hoặc _netrccho Windows) trong của bạn $HOME, với nội dung sau

    máy ipaddress: cổng
    đăng nhập userId
    mật khẩu pwd @

Curl được sử dụng bởi Git ở phía sau cảnh sẽ xử lý mã hóa tốt @hoặc không @.


Cảm ơn câu trả lời của bạn. Máy chủ là ổ đĩa mạng mà chỉ có tôi và 2 nhà phát triển khác sẽ sử dụng. Vì vậy, tôi nghĩ không cần mã hóa. Và tôi sẽ thử sử dụng netrc một lúc nào đó.
Karthik

@Karthik: điều đó sẽ cho phép bạn chỉ cần sử dụng: http://123@ipaddress:port/...làm địa chỉ sao chép mà không cần phải thêm thông tin người dùng và mật khẩu.
VonC

8

Mã hóa URL bất kỳ ký tự bất thường nào.

Danh sách mã url.

@ character is %40

Trong tệp cấu hình git của tôi, tôi đã mã hóa 'chỉ' tên người dùng chẳng hạn:

https://myemail%40gmail.com@myrepo.org/api.git


5

Ví dụ: mật khẩu của bạn được lưu trữ trong biến môi trường GIT_PASSWORD, tên người dùng - GIT_USERNAME, sau đó:

git clone http://${GIT_USERNAME}:$(echo -n $GIT_PASSWORD | hexdump -v -e '"x" 1/1 "%02X"' | tr x %)@repository.git

Giải thích về: echo -n $GIT_PASSWORD | hexdump -v -e '"x" 1/1 "%02X"' | tr x %

  1. Mật khẩu in: $GIT_PASSWORD<-hello
  2. Chuyển 'hello' thành hex: hello<-x68x65x6Cx6Cx6F
  3. Thay đổi từng 'x' thành '%': x68x65x6Cx6Cx6F<-%68%65%6C%6C%6F

Trong phần giải thích đầu tiên, bạn có ý định sử dụng $ GIT_ PASSWORD thay vì $ GIT_REPOSITORY?
Ninju Bohra

@NinjuBohra, vâng, cảm ơn!
isnullxbh

1

Bạn phải mã hóa phần trăm | mã hóa các ký tự đặc biệt. Ví dụ: thay vì cái này:

http://foo:B@r@http-gateway.domain.org:80

bạn viết cái này:

http://foo:B%40r@http-gateway.domain.org:80

Vì vậy, @được thay thế bằng %40.


Câu trả lời này đã được đăng.
akop
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.