Câu hỏi Có cách nào để bỏ qua nhập mật khẩu khi sử dụng https: // trên GitHub không?


Gần đây tôi đã chuyển sang đồng bộ hóa các kho lưu trữ của tôi thành https: // trên GitHub (do các sự cố tường lửa), và nó yêu cầu mật khẩu mỗi lần. Nó từng là tôi có một SSH giấy chứng nhận, và nó là đủ. Có cách nào để bỏ qua mật khẩu trong trường hợp của tôi (sử dụng http / https) không?


1623
2018-03-17 17:47


gốc


Xem thêm superuser.com/questions/199507/… - Colonel Panic
Bây giờ bạn có thể sử dụng trình trợ giúp thông tin xác thực để mã hóa _netrc tệp chứa thông tin đăng nhập của bạn. Xem câu trả lời của tôi bên dưới. Tôi thấy rằng an toàn hơn rằng git-credential-winstore.exe (bộ nhớ cache) mà là một chút lỗi trên Windows. - VonC
Xem thêm Git push yêu cầu tên người dùng và mật khẩu và Git liên tục nhắc tôi nhập mật khẩu.
git-credential-winstore đã làm việc tốt nhất cho Windows. Lỗi gì vậy? Thiết lập ssh là tùy chọn ưa thích, mặc dù tôi đã thực hiện nó nhiều lần, đó là cách dễ bị lỗi hơn và đôi khi chỉ đơn giản là không hoạt động khi bạn phải kết nối với nhiều máy chủ. - Bron Davies
Bởi "chứng chỉ SSH", tôi giả sử bạn có nghĩa là "khóa riêng SSH". - Michael Mior


Các câu trả lời:


Với phiên bản Git 1.7.9 trở lên

Kể từ Git 1.7.9 (được phát hành vào cuối tháng 1 năm 2012), có một cơ chế gọn gàng trong Git để tránh phải nhập mật khẩu của bạn mọi lúc cho HTTP / HTTPS, được gọi là người trợ giúp thông tin xác thực. (Nhờ vào dazonic để chỉ ra tính năng mới này trong các bình luận bên dưới.)

Với Git 1.7.9 trở lên, bạn chỉ có thể sử dụng một trong các trình trợ giúp thông tin xác thực sau:

git config --global credential.helper cache

... cho Git giữ mật khẩu của bạn được lưu trữ trong bộ nhớ (mặc định) 15 phút. Bạn có thể đặt thời gian chờ lâu hơn với:

git config --global credential.helper "cache --timeout=3600"

(Ví dụ đó được đề xuất trong Trang trợ giúp GitHub cho Linux.) Bạn cũng có thể lưu trữ thông tin đăng nhập của mình vĩnh viễn nếu muốn, xem các câu trả lời khác bên dưới.

Trợ giúp của GitHub cũng gợi ý nếu bạn đang sử dụng Mac OS X và đã sử dụng Homebrew để cài đặt Git, bạn có thể sử dụng kho khóa Mac OS X gốc với:

git config --global credential.helper osxkeychain

Đối với Windows, có một người trợ giúp được gọi là Trình quản lý thông tin xác thực Git cho Windows hoặc là wincred trong msysgit.

git config --global credential.helper wincred # obsolete

Với Git cho Windows 2.7.3+ (Tháng 3 năm 2016):

git config --global credential.helper manager

Đối với Linux, bạn có thể sử dụng gnome-keyring(hoặc thực hiện keyring khác như KWallet).

Với phiên bản Git trước 1.7.9

Với các phiên bản của Git trước 1.7.9, tùy chọn an toàn hơn này không khả dụng và bạn cần phải thay đổi URL mà origin sử dụng từ xa để bao gồm mật khẩu trong thời trang này:

https://you:password@github.com/you/example.git

... nói cách khác với :password sau tên người dùng và trước @.

Bạn có thể đặt một URL mới cho origin từ xa với:

git config remote.origin.url https://you:password@github.com/you/example.git

Hãy chắc chắn rằng bạn sử dụng https và bạn nên biết rằng nếu bạn làm điều này, mật khẩu GitHub của bạn sẽ được lưu trữ trong văn bản thuần túy trong .git thư mục, rõ ràng là không mong muốn.

Với bất kỳ phiên bản Git nào (tốt, kể từ phiên bản 0,99)

Một cách tiếp cận khác là đặt tên người dùng và mật khẩu của bạn vào ~/.netrc tệp, mặc dù, như với việc giữ mật khẩu trong URL từ xa, điều này có nghĩa là mật khẩu của bạn sẽ được lưu trữ trên đĩa trong văn bản thuần túy và do đó kém an toàn hơn và không được khuyến nghị. Tuy nhiên, nếu bạn muốn thực hiện phương pháp này, hãy thêm dòng sau vào ~/.netrc:

machine <hostname> login <username> password <password>

... thay thế <hostname> với tên máy chủ của máy chủ và <username> và <password> với tên người dùng và mật khẩu của bạn. Đồng thời, hãy nhớ đặt quyền hạn chế độ tệp hệ thống hạn chế trên tệp đó:

chmod 600 ~/.netrc

Lưu ý rằng trên Windows, tệp này sẽ được gọi _netrcvà bạn có thể cần xác định biến môi trường% HOME% - để biết thêm chi tiết, hãy xem:


2136
2018-03-17 17:54



Không lưu trữ mật khẩu của bạn ở dạng văn bản thuần túy. Kể từ Git 1.7.9, bạn có thể sử dụng trình trợ giúp thông tin xác thực. git config --global credential.helper osxkeychain trên OS X. Đối với hệ điều hành khác, hãy xem help.github.com/articles/set-up-git - dazonic
FWIW, các công cụ keychain osx là một phần của mã nguồn GIT cơ sở, nó không phải là một thành phần độc quyền của Brew hoặc MacPorts hoặc bất kỳ hương vị của tháng là. Và bạn thậm chí không cần phải xây dựng git từ đầu - chỉ cần cd contrib / credential / osxkeychain / và chạy make. - synthesizerpatel
Với xác thực hai yếu tố, bạn phải sử dụng github gọi là Mã thông báo truy cập của người. Trong thực tế, bạn nên luôn luôn sử dụng một, như không giống như một mật khẩu bạn có thể kiểm soát những gì truy cập nó mang lại. Chỉ cần thay thế mật khẩu trong url để bạn kết thúc bằng https://username:PERSONAL_ACCESS_TOKEN@github.com/username/project.git. Nó làm cho mật khẩu văn bản đơn giản được lưu trữ trên đĩa gần như an toàn, đủ để sử dụng. - Russell Stuart
git config --global credential.helper cache không hoạt động trên các cửa sổ: stackoverflow.com/questions/11693074/… sử dụng gitcredentialstore trên Windows một cách vui vẻ - Sebastian J.
Bất kỳ cách nào để thiết lập thời gian chờ này đến vô cùng? - sudo


Bạn cũng có thể có Git lưu trữ thông tin đăng nhập của bạn vĩnh viễn bằng cách sử dụng như sau:

git config credential.helper store

Lưu ý: Mặc dù điều này thuận tiện, Git sẽ lưu trữ thông tin xác thực của bạn bằng văn bản rõ ràng trong một tệp cục bộ (.git-credentials) trong thư mục dự án của bạn (xem bên dưới cho thư mục "home"). Nếu bạn không thích điều này, hãy xóa tệp này và chuyển sang sử dụng tùy chọn bộ nhớ cache.

Nếu bạn muốn Git tiếp tục yêu cầu bạn cung cấp thông tin đăng nhập mỗi khi cần kết nối với kho lưu trữ từ xa, bạn có thể chạy lệnh này:

git config --unset credential.helper

Để lưu trữ mật khẩu trong .git-credentials trong của bạn %HOME% thư mục như trái ngược với thư mục dự án: sử dụng --global cờ

git config --global credential.helper store

639
2017-09-03 01:14



Trên Windows, bạn có thể tải xuống một tiện ích trợ giúp cấu hình mọi thứ để lưu trữ một phiên bản mã hóa mật khẩu GIT được mã hóa của bạn trong Windows Creditial Store, xem confluence.atlassian.com/display/STASH/… - Contango
Tôi thấy rằng tôi phải chỉ định --global hoặc nó sẽ cố gắng lưu trữ các thiết lập trong kho lưu trữ hiện tại: git config --global credential.helper store - Brian Gordon
Tại sao bộ nhớ cache thay vì lưu trữ vĩnh viễn? Chia sẻ máy tính hoặc một cái gì đó? - Michael J. Calkins
@BrianGordon Tôi đang sử dụng GIT 1.9.5 trên Windows và --global cờ là dư thừa. Ngay cả khi không có cờ này, tệp thông tin đăng nhập đã được tạo trong %USER_HOME% danh mục. - jFrenetic
nếu không được lưu trữ trong văn bản thuần túy, nó được bảo vệ bằng gì? Mật khẩu của bạn? Sau đó sẽ không phải hỏi bạn mật khẩu quản trị của bạn khi bạn kết nối với git? Bạn không phải nhập mật khẩu để nhận mật khẩu khác lạ một chút? - Cruncher


TLDR; Sử dụng một tệp netrc được mã hóa với Git 1.8.3+.

Lưu mật khẩu cho một kho lưu trữ Git URL HTTPS là có thể với một ~/.netrc (Unix) hoặc %HOME%/_netrc (lưu ý _) trên Windows.

Nhưng: Tệp đó sẽ lưu trữ mật khẩu của bạn ở dạng văn bản thuần túy.

Dung dịch: Mã hóa tệp đó bằng GPG (Bảo vệ quyền riêng tư của GNU)và làm cho Git giải mã nó mỗi khi cần mật khẩu (cho push/pull/fetch/clone hoạt động).


Lưu ý: với Git 2.18 (Q2 2018), bây giờ bạn có thể tùy chỉnh GPG được sử dụng để giải mã mã hóa .netrc tập tin.

Xem cam kết 786ef50, cam kết f07eeed (12 tháng 5 năm 2018) bởi Luis Marsano (``).
(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 để giải mã bằng 'gpg'bất kể   tùy chọn gpg.program.
  Đây là vấn đề đối với các bản phân phối như Debian gọi GnuPG hiện đại, chẳng hạn như 'gpg2'


Hướng dẫn từng bước cho Windows

Với Windows:

(Git có một gpg.exe trong phân phối của nó, nhưng sử dụng một cài đặt GPG đầy đủ bao gồm một gpg-agent.exe, sẽ ghi nhớ cụm từ mật khẩu của bạn được liên kết với khóa GPG của bạn.)

  • cài đặt, dựng lên gpg4Win Lite, giao diện dòng lệnh gnupg tối thiểu (lấy gần đây nhất gpg4win-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 kịch bản Bash để thực thi lệnh'gpg'. Vì gpg4win-vanilla-2 đi cùng gpg2.exe, bạn cần phải sao chép nó.)

  • Tạo hoặc nhập khóa GPG và tin tưởng:

    gpgp --import aKey
    # or
    gpg --gen-key
    

(Đảm bảo đặt cụm mật khẩu cho khóa đó.)

  • Tin tưởng khóa đó

  • Cài đặt tập lệnh trợ giúp thông tin xác thực trong 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
    

(Có, đây là một kịch bản Bash, nhưng nó sẽ hoạt động trên Windows vì nó sẽ được gọi bởi Git.)

  • Tạo một tệp _netrc trong văn bản rõ ràng

    machine a_server.corp.com
    login a_login
    password a_password
    protocol https
    
    machine a_server2.corp.com
    login a_login2
    password a_password2
    protocol https
    

(Đừng quên 'protocol' phần: 'http' hoặc là 'https'tùy thuộc vào URL bạn sẽ sử dụng.)

  • Mã hóa tệp đó:

    gpg -e -r a_recipient _netrc
    

(Bây giờ bạn có thể xóa bỏ các _netrc tệp, chỉ giữ _netrc.gpg được mã hóa.)

  • Sử dụng tệp được mã hóa đó:

    git config --local credential.helper "netrc -f C:/path/to/_netrc.gpg -v"
    

(Lưu ý '/': C:\path\to... sẽ không hoạt động chút nào.) (Bạn có thể sử dụng lúc đầu -v -d để xem chuyện gì đang xảy ra.)

Từ bây giờ, 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.gpgvà sử dụng thông tin đăng nhập / mật khẩu liên quan đến máy chủ bạn đang liên hệ. Lần đầu tiên, GPG sẽ yêu cầu bạn nhập cụm từ mật khẩu của khóa GPG của bạn, để giải mã tệp. Lần khác, tác nhân gpg tự động khởi chạy bởi cuộc 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 "cache", nơi bạn cần nhớ và gõ (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 mật khẩu được lưu trong bộ nhớ.


85
2017-08-21 15:48



thử cùng một thứ trên linux .. git config --local credential.helper "netrc -f /home/me/.netrc.gpg -v -d" ..và tôi nhận được "git: 'credential-netrc' không phải là một lệnh git. xem 'git --help' " - sunny
@sunny Đó là những gì curl -o c:\prgs\bin\git-credential-netrc https://raw.github.com/git/git/master/contrib/credential/netrc/git-credential-netrcdành cho: bạn cần phải sao chép git-credential-netrc mọi nơi trong đường dẫn của bạn ($PATH), để git có thể gọi 'credential-netrc'. - VonC
Cảm ơn đã bỏ lỡ điều đó. - sunny
Vâng, _netrc đã không làm việc cho tôi trên một Windows 7 PC, nhưng .netrc làm việc cho youtube-dl với --netrc đối số được truyền cho nó. - Iulian Onofrei
Giải pháp tốt nhất, nên ở trên cùng. - Doug713705


Có một cách dễ dàng, lỗi thời để lưu trữ thông tin đăng nhập của người dùng trong URL HTTPS:

https://user:password@github.com/...

Bạn có thể thay đổi URL bằng git remote set-url <remote-repo> <URL>

Nhược điểm rõ ràng của phương pháp đó là bạn phải lưu trữ mật khẩu ở dạng văn bản thuần túy. Bạn vẫn có thể nhập tên người dùng (https://user@github.com/...) ít nhất sẽ giúp bạn tiết kiệm một nửa rắc rối.

Bạn có thể muốn chuyển sang SSH hoặc sử dụng phần mềm máy khách GitHub.


32
2018-01-06 16:43



Tên người dùng / mật khẩu có thể cần phải được mã hóa, xem stackoverflow.com/a/34611311/3906760 - MrTux


Sử dụng cửa hàng thông tin xác thực.

Dành cho git 2.11+ trên OSX và linux, sử dụng kho thông tin xác thực tích hợp của git:

git config --global credential.helper libsecret

Đối với msysgit 1.7.9+ trên các cửa sổ:

git config --global credential.helper wincred

Đối với Git 1.7.9+ trên OS X, hãy sử dụng:

git config --global credential.helper osxkeychain

30
2017-09-09 03:57



Tôi chắc chắn rằng đây là con đường để đi, nhưng tôi nhận được một lỗi đáng buồn: git: 'credential-gnome-keyring' is not a git command. See 'git --help'. - codepleb
Cảm ơn, nhưng tôi nhận được cùng một lỗi bằng cách nào đó. Tôi có làm điều gì sai? Tôi gõ lệnh và không có gì xảy ra. Ngay sau khi tôi đẩy, tôi được hỏi về thông tin đăng nhập mà tôi đã chèn thành công, nhưng tôi nhận được lỗi, rằng đó không phải là lệnh git sau khi thực hiện điều đó. - codepleb
Trước khi libsecret hoạt động trên Linux, bạn cần thực hiện các bước sau: stackoverflow.com/a/40312117/775800 - Lavamantis
Một điều khác - nếu bạn đã bật 2FA trên Github, mật khẩu của bạn sẽ không hoạt động. Nhưng bạn có thể tạo mã thông báo truy cập cá nhân trên trang "Cài đặt" Github của bạn và mã thông báo đó hoạt động như mật khẩu của bạn. github.com/github/hub/issues/822 - Lavamantis
credential-libsecret 'không phải là lệnh git - Siddharth


Bạn chỉ có thể sử dụng

git config credential.helper store

Khi bạn nhập mật khẩu lần sau bằng cách kéo hoặc đẩy nó sẽ được lưu trữ trong .git-credentials dưới dạng văn bản thuần túy (một chút không an toàn, nhưng chỉ cần đặt nó vào thư mục được bảo vệ)

Và đó là nó, như đã nêu trên trang này:

https://git-scm.com/docs/git-credential-store


30
2017-09-21 13:03



Dành cho Git cho Windows 2.7.3 (tháng 3 năm 2016): github.com/git-for-windows/git/releases?after=v2.8.4.windows.1, đó sẽ là git config credential.helper manager thay thế - VonC
Đây là câu trả lời thực sự trả lời câu hỏi của OP theo ý kiến ​​của tôi - Climax


Tôi có thể hơi chậm, nhưng không rõ ràng với tôi rằng tôi cần phải tải xuống trình trợ giúp trước! Tôi đã tìm thấy bản tải xuống credential.helper tại Xác nhận vĩnh viễn của Atlassian với kho Git, hy vọng nó giúp.

Trích dẫn:

Làm theo các bước sau nếu bạn muốn sử dụng Git với bộ nhớ đệm thông tin xác thực trên OSX:

Tải xuống chuỗi git-credential-osxkeychain nhị phân.

Chạy lệnh dưới đây để đảm bảo tệp nhị phân có thể thực thi được:

chmod a+x git-credential-osxkeychain

Đặt nó vào thư mục / usr / local / bin.

Chạy lệnh dưới đây:

git config --global credential.helper osxkeychain

18
2017-10-05 05:31





Trên một thiết lập GNU / Linux, ~ / .netrc hoạt động khá tốt:

$ cat ~/.netrc
machine github.com login lot105 password howsyafather

Nó có thể phụ thuộc vào thư viện mạng mà Git đang sử dụng cho HTTPS vận chuyển.


18
2017-12-05 13:28



Hãy chắc chắn cũng chmod 0600 ~/.netrc. - poolie
Chỉ muốn để lại một liên kết ở đây đến Ubuntu netrc manpage. Tôi cần tạo nó cho một người dùng khác (/home/git/.netrc) rồi thay đổi quyền sở hữu cho người dùng đó. - zacharydl


Chỉ cần bao gồm thông tin xác thực đăng nhập như một phần của URL:

git remote rm origin 
git remote add origin https://username:mypassword@github.com/path/to/repo.git

15
2017-07-03 07:13



không hoạt động nếu tên người dùng là email - Anirudh Goel
nó sẽ hoạt động, bạn phải thoát @ với% 40 trong id email của bạn - Tarun Gupta
Nếu chúng ta có dấu '+' trong id email thì sao? Tôi đã thử cùng lối thoát nhưng push nói 'repo not found' - killjoy
có% 2B thay vì + - Tarun Gupta
Để tham khảo trong tương lai: url-encode-decode.com - dviljoen


Đối với Windows, bạn có thể sử dụng Git Credential Manager (GCM) plugin. Nó hiện đang được duy trì bởi Microsoft. Điều thú vị là nó lưu mật khẩu trong Windows Credential Store, không phải là văn bản thuần túy.

Có một trình cài đặt trên trang phát hành của dự án. Điều này cũng sẽ cài đặt phiên bản chính thức của git-cho-windows với trình quản lý thông tin đăng nhập được tích hợp sẵn. Nó cho phép xác thực 2 yếu tố cho github (và các máy chủ khác). Và có giao diện đồ họa để đăng nhập lần đầu.

Đối với người dùng Cygwin (hoặc người dùng đã sử dụng git-cho-windows chính thức), bạn có thể thích cài đặt thủ công. Tải xuống gói zip từ trang phát hành. Giải nén gói rồi chạy install.cmd. Điều này sẽ cài đặt cho bạn ~/bin thư mục. (Hãy chắc chắn rằng bạn ~/bin trong thư mục PATH.) Sau đó bạn cấu hình nó bằng lệnh này:

git config --global credential.helper manager

Git sau đó sẽ chạy git-credential-manager.exe khi xác thực với bất kỳ máy chủ nào.


12
2018-05-24 07:49



Bất kỳ ai đăng nhập vào tài khoản của bạn đều có thể truy cập dễ dàng vào bản rõ mật khẩu. Tất cả những gì họ cần làm là gửi yêu cầu đến người quản lý thông tin xác thực như printf "protocol=https\nhost=git.mycompany.com\n" | git credential-manager get (biết thêm chi tiết tại đây). Bạn nên luôn luôn sử dụng mã thông báo truy cập cá nhân với điều này, và tất nhiên sử dụng 2FA trên tài khoản GitHub của bạn. - Curt J. Sampson