Git - Cách sử dụng tệp .netrc trên Windows để lưu người dùng và mật khẩu


172

Có thể sử dụng tệp .netrc trên Windows khi tôi đang sử dụng Git để sao chép kho lưu trữ từ xa bằng HTTP và mật khẩu người dùng?

Câu trả lời:


203

Có thể sử dụng một .netrctập tin trên Windows?

Có: Bạn phải:

  • xác định biến môi trường %HOME%(trước Git 2.0, không còn cần thiết với Git 2.0+)
  • đặt một _netrctập tin vào%HOME%

Nếu bạn đang sử dụng Windows 7/10, trong một CMDphiên, hãy nhập:

setx HOME %USERPROFILE%

%HOME%sẽ được đặt thành ' C:\Users\"username"'.
Chuyển đến thư mục đó ( cd %HOME%) và tạo một tệp có tên ' _netrc'

Lưu ý: Một lần nữa, dành cho Windows, bạn cần có một ' _netrc' tập tin, không một ' .netrc' tập tin.

Nội dung của nó khá chuẩn (Thay thế <examples>bằng các giá trị của bạn):

machine <hostname1>
login <login1>
password <password1>
machine <hostname2>
login <login2>
password <password2>

Luke đề cập trong các ý kiến:

Sử dụng phiên bản mới nhất của msysgit trên Windows 7, tôi không cần đặt HOMEbiến môi trường. Các _netrctập tin một mình đã lừa.

Đây thực sự là những gì tôi đã đề cập trong phần " Cố gắng installgặt hái, .sshkhông có ở đó ": được
git-cmd.batbao gồm trong msysgit không đặt %HOME%biến môi trường:

@if not exist "%HOME%" @set HOME=%HOMEDRIVE%%HOMEPATH%
@if not exist "%HOME%" @set HOME=%USERPROFILE%

Tin vào các ý kiến ​​rằng "có vẻ như nó sẽ không hoạt động cho giao thức http"

Tuy nhiên, tôi đã trả lời netrcđược sử dụng bởi curlvà hoạt động cho giao thức HTTP, như trong ví dụ này (tìm ' netrc' trong trang) :. Cũng được sử dụng với giao thức HTTP tại đây: " _netrc/ .netrcthay thế chocURL ".


Một cái bẫy phổ biến với netrcsự hỗ trợ trên Windows là git sẽ bỏ qua việc sử dụng nó nếu url https gốc chỉ định tên người dùng.

Ví dụ: nếu .git/configtệp của bạn chứa:

[từ xa "nguồn gốc"]
     tìm nạp = + refs / Heads / *: refs / điều khiển từ xa / origin / *
     url = https: //bob@code.google.com/p/my-project/

Git sẽ không giải quyết thông tin đăng nhập của bạn thông qua _netrc, để khắc phục điều này xóa tên người dùng của bạn, như vậy:

[từ xa "nguồn gốc"]
     tìm nạp = + refs / Heads / *: refs / điều khiển từ xa / origin / *
     url = https://code.google.com.vn/p/my-project/

Giải pháp thay thế: Với phiên bản git 1.7.9+ (January 2012): Câu trả lời này từ Đánh dấu Longair chi tiết cơ chế bộ nhớ cache chứng chỉcũng cho phép bạn không lưu trữ mật khẩu của bạn trong văn bản đơn giản như hình dưới đây.


Với Git 1.8.3 (tháng 4 năm 2013):

Bây giờ bạn có thể sử dụng .netrc được mã hóa (có gpg).
Trên Windows: %HOME%/_netrc( _, không phải ' .')

Một trình trợ giúp thông tin chỉ đọc mới (in contrib/) để tương tác với các .netrc/.authinfotệp đã được thêm vào.

Tập lệnh đó sẽ cho phép bạn sử dụng các tệp netrc được mã hóa gpg , tránh vấn đề lưu thông tin đăng nhập của bạn trong một tệp văn bản thuần túy.

Các tệp có .gpgphần mở rộng sẽ được GPG giải mã trước khi phân tích cú pháp.
Nhiều -fđối số là OK. Chúng được xử lý theo thứ tự và mục nhập phù hợp đầu tiên được tìm thấy được trả về thông qua giao thức trợ giúp thông tin xác thực.

Khi không có -ftùy chọn được đưa ra, .authinfo.gpg, .netrc.gpg, .authinfo, và .netrccác file trong thư mục chính của bạn được sử dụng theo thứ tự này.

Để kích hoạt trình trợ giúp thông tin này:

git config credential.helper '$shortname -f AUTHFILE1 -f AUTHFILE2'

(Lưu ý rằng Git sẽ thêm " git-credential-" vào tên người trợ giúp và tìm kiếm nó trong đường dẫn.)

# and if you want lots of debugging info:
git config credential.helper '$shortname -f AUTHFILE -d'

#or to see the files opened and data found:
git config credential.helper '$shortname -f AUTHFILE -v'

Xem ví dụ đầy đủ tại " Có cách nào để bỏ qua việc nhập mật khẩu khi sử dụnghttps:// github "


Với Git 2.18+ (tháng 6 năm 2018), giờ đây bạn có thể tùy chỉnh chương trình GPG được sử dụng để giải mã .netrctệ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 gpgtù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'


@Bernd: HOMEbiến môi trường rất quan trọng, vì nó không được xác định theo mặc định trên Windows. Bạn có thể đặt biến đó thành bất kỳ thư mục nào bạn muốn (không cần phải như vậy C:\users\mylogin): ví dụ: tại nơi làm việc, tôi đặt nó vào đĩa từ xa riêng được liên kết với tài khoản Windows của tôi, cho phép tôi chuyển đổi máy tính để bàn mà không phải mất của tôi .sshhoặc _netrccài đặt.
VonC

@Bernd: cũng kiểm tra xem repo Git của bạn có trên máy chủ LAN hoặc WAN (internet) không. Bạn có thể cần xác định một http.proxytrong các biến môi trường của bạn. Hoặc ngược lại, để thêm máy chủ của bạn vào một no_proxybiến, để tránh cố gắng truy cập máy chủ LAN qua mạng LAN.
VonC

Tên và giá trị cho biến môi trường là gì? Bạn có thể nói rõ hơn một chút về VonC
Dennis D

@DennisD: hai biến môi trường tôi nói trong câu trả lời và trong các bình luận là HOME và http_proxy. HOME sẽ tham khảo bất kỳ thư mục bạn muốn. http_proxy sẽ tham chiếu địa chỉ proxy nếu bạn có.
VonC

Sử dụng phiên bản mới nhất msysgittrên Windows 7, tôi không cần đặt HOMEbiến môi trường. Các _netrctập tin một mình đã lừa.
Lu-ca

35

Bạn cũng có thể cài đặt Trình quản lý thông tin Git cho Windows để lưu mật khẩu Git trong trình quản lý thông tin đăng nhập Windows thay vì _netrc. Đây là một cách an toàn hơn để lưu trữ mật khẩu.


8
Câu trả lời tuyệt vời, đây là câu trả lời duy nhất tôi tìm thấy cho phép tôi giữ sự đơn giản của tên người dùng / mật khẩu (an toàn) mà không phải đối phó với tất cả những thứ nhảm nhí SSH đó.
Kirk Woll

@KirkWoll xem câu trả lời cập nhật của tôi ở trên: bây giờ bạn có thể lưu thông tin đăng nhập của mình vào một .netrctệp được mã hóa . Bạn sẽ không phải nhập những thông tin đó dù chỉ một lần trong suốt phiên.
VonC

11

Điều này sẽ cho phép Git xác thực trên HTTPS bằng cách sử dụng .netrc:

  • Các tập tin nên được đặt tên _netrcvà nằm trong c:\Users\<username>.
  • Bạn sẽ cần đặt biến môi trường có tên HOME=%USERPROFILE%(đặt biến môi trường toàn hệ thống bằng tùy chọn Hệ thống trong bảng điều khiển. Tùy thuộc vào phiên bản Windows, bạn có thể cần chọn "Tùy chọn nâng cao".).
  • Mật khẩu được lưu trong _netrctệp không thể chứa dấu cách (trích dẫn mật khẩu sẽ không hoạt động).

Giải pháp đơn giản và tốt nhất. Làm việc như say mê với dòng lệnh Android Studio, Source Tree và Git. Tôi đã phải sử dụng điều này khi Google khuyến nghị tùy chọn Cloud SDK cert.rcper không thành công và phải tự tạo thông tin đăng nhập và sử dụng với tệp RC net. Trong trường hợp của tôi, tôi không yêu cầu tùy chọn 2 và 3.
Hari

1

Tôi đang đăng một cách sử dụng _netrcđể tải tài liệu từ trang web www.c thuyết.com.

Nếu ai đó sẽ sử dụng coursera-dl để tải xuống các tài liệu lớp mở trên www.coursera.com và trên HĐH Windows, ai đó muốn sử dụng một tệp như ".netrc" trong HĐH Unix để thêm tùy chọn -nthay vì -U <username> -P <password>cho thuận tiện. Anh ấy / cô ấy có thể làm điều đó như thế này:

  1. Kiểm tra đường dẫn về nhà trên HĐH Windows: setx HOME %USERPROFILE%(tham khảo câu trả lời của VonC ). Nó sẽ lưu HOMEbiến môi trường như C:\Users\"username".

  2. Xác định vị trí vào thư mục C:\Users\"username"và tạo một tên tập tin _netrc. LƯU Ý: KHÔNG có bất kỳ hậu tố. nội dung giống như:machine coursera-dl login <user> password <pass>

  3. Sử dụng một lệnh như coursera-dl -n --path PATH <course name>để tải về các tài liệu lớp. Thêm chi tiết tùy chọn coursera-dl cho trang này .

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.