TLDR; Sử dụng tệp netrc được mã hóa với Git 1.8.3+ .
Có thể lưu mật khẩu cho URL HTTPS của kho lưu trữ Git bằng ~/.netrc
(Unix) hoặc %HOME%/_netrc
(lưu ý _
) trên Windows.
Nhưng : Tập tin đó sẽ lưu trữ mật khẩu của bạn trong văn bản thuần túy.
Giải pháp : Mã hóa tệp đó bằng GPG (GNU Privacy Guard) và làm cho Git giải mã nó mỗi khi nó cần mật khẩu (cho push
/ pull
/ fetch
/ clone
thao tác).
Lưu ý: với Git 2.18 (quý 2 năm 2018), giờ đây bạn có thể tùy chỉnh GPG được sử dụng để giải mã .netrc
tệp được mã hóa .
Xem cam kết 786ef50 , cam kết đã được nhận (12 tháng 5 năm 2018) bởi Luis Marsano (``) .
(Được hợp nhất bởi Junio C Hamano - gitster
- trong cam kết 017b7c5 , ngày 30 tháng 5 năm 2018)
git-credential-netrc
: chấp nhận gpg
tùy chọn
git-credential-netrc
đã được mã hóa cứng để giải mã với ' gpg
' bất kể tùy chọn gpg.program.
Đây là một vấn đề trên các bản phân phối như Debian gọi GnuPG hiện đại một cái gì đó khác, như ' gpg2
'
Hướng dẫn từng bước cho Windows
Với Windows:
(Git có gpg.exe
bản phân phối, nhưng sử dụng cài đặt GPG đầy đủ bao gồm a gpg-agent.exe
, nó sẽ ghi nhớ cụm mật khẩu được liên kết với khóa GPG của bạn.)
Cài đặt gpg4Win Lite
, giao diện dòng lệnh gnupg tối thiểu (lấy gần đây nhấtgpg4win-vanilla-2.X.Y-betaZZ.exe
) và hoàn thành PATH của bạn với thư mục cài đặt GPG:
set PATH=%PATH%:C:\path\to\gpg
copy C:\path\to\gpg\gpg2.exe C:\path\to\gpg\gpg.exe
(Lưu ý copy
lệnh '': Git sẽ cần một tập lệnh Bash để thực thi lệnh ' gpg
'. Kể từ khi gpg4win-vanilla-2
đi kèm gpg2.exe
, bạn cần sao chép nó.)
(Đảm bảo đặt cụm mật khẩu cho khóa đó.)
Tin vào chìa khóa đó
Cài đặt tập lệnh trợ giúp thông tin xác thực trong một thư mục trong %PATH%
:
cd c:\a\fodler\in\your\path
curl -o c:\prgs\bin\git-credential-netrc https://raw.githubusercontent.com/git/git/master/contrib/credential/netrc/git-credential-netrc.perl
(Coi chừng: tập lệnh được đổi tên trong Git 2.25.x / 2.26, xem bên dưới)
(Vâng, đây là tập lệnh Bash, nhưng nó sẽ hoạt động trên Windows vì nó sẽ được gọi bởi Git.)
(Đừng quên phần ' protocol
': ' http
' hoặc ' https
' tùy thuộc vào URL bạn sẽ sử dụng.)
(Bây giờ bạn có thể xóa_netrc
tệp, chỉ giữ lại tệp _netrc.gpg
được mã hóa.)
(Lưu ý ' /
': hoàn toàn C:\path\to...
không hoạt động.) (Lúc đầu bạn có thể sử dụng -v -d
để xem chuyện gì đang xảy ra.)
Từ giờ trở đi, bất kỳ lệnh Git nào sử dụng URL HTTP (S) yêu cầu xác thực sẽ giải mã _netrc.gpg
tệp đó và sử dụng thông tin đăng nhập / mật khẩu được liên kết với máy chủ mà bạn đang liên hệ. Lần đầu tiên, GPG sẽ yêu cầu bạn nhập cụm mật khẩu của khóa GPG để giải mã tệp. Lần khác, tác nhân gpg được khởi chạy tự động bởi lệnh gọi GPG đầu tiên sẽ cung cấp cụm mật khẩu đó cho bạn.
Bằng cách đó, bạn có thể ghi nhớ một số URL / thông tin đăng nhập / mật khẩu trong một tệp và được lưu trữ trên đĩa của bạn được mã hóa.
Tôi thấy nó thuận tiện hơn một "trình trợ giúp" bộ đệm ", nơi bạn cần nhớ và nhập (một lần mỗi phiên) một mật khẩu khác nhau cho mỗi dịch vụ từ xa của bạn, cho biết mật khẩu được lưu trong bộ nhớ.
Với Git 2.26 (Q1 2020), trình trợ giúp thông tin mẫu để sử dụng .netrc
đã được cập nhật để hoạt động tốt. Xem bản vá / thảo luận .
Xem cam kết 6579d93 , cam kết 1c78c78 (ngày 20 tháng 12 năm 2019) của Denton Liu ( Denton-L
) .
(Được hợp nhất bởi Junio C Hamano - gitster
- trong cam kết 1fd27f8 , ngày 25 tháng 12 năm 2019)
Đã ký tắt: Denton Liu
Đường dẫn shebang cho trình thông dịch Perl git-credential-netrc
đã được mã hóa cứng.
Tuy nhiên, một số người dùng có thể đặt nó ở một vị trí khác và do đó, sẽ phải chỉnh sửa tập lệnh theo cách thủ công.
Thêm .perl
tiền tố vào tập lệnh để biểu thị nó dưới dạng mẫu và bỏ qua phiên bản đã tạo.
Tăng thêm Makefile
để nó tạo ra git-credential-netrc
từ git-credential-netrc.perl
, giống như kịch bản Perl khác.
Các công thức nấu ăn Makefile đã bị đánh cắp một cách đáng xấu hổ contrib/mw-to-git/Makefile
.
Và:
Với 2.26 (Q1 2020), Trình trợ giúp thông tin mẫu để sử dụng .netrc đã được cập nhật để hoạt động tốt.
Xem cam kết 6579d93 , cam kết 1c78c78 (ngày 20 tháng 12 năm 2019) của Denton Liu ( Denton-L
) .
(Được hợp nhất bởi Junio C Hamano - gitster
- trong cam kết 1fd27f8 , ngày 25 tháng 12 năm 2019)
Đã ký tắt: Denton Liu
Hiện tại, git-credential-netrc
không hoạt động bên ngoài kho git. Nó không thành công với lỗi sau:
fatal: Not a git repository: . at /usr/share/perl5/Git.pm line 214.
Không có lý do thực sự tại sao cần phải ở trong một kho lưu trữ, mặc dù. Người trợ giúp đáng tin cậy cũng có thể làm việc tốt ngoài kho lưu trữ.
Gọi phiên bản không tự của config()
để git-credential-netrc
không còn cần phải chạy trong kho lưu trữ.
Jeff King ( peff
) cho biết thêm:
Tôi giả sử bạn đang sử dụng mã hóa gpg netrc
(nếu không, có lẽ bạn chỉ nên sử dụng credential-store
).
Để truy cập mật khẩu "chỉ đọc", tôi thấy sự kết hợp pass
với cấu hình như thế này đẹp hơn một chút:
[credential "https://github.com"]
username = peff
helper = "!f() { test $1 = get && echo password=`pass github/oauth`; }; f"