Có cách nào để lưu thông tin đăng nhập GitHub để đẩy các cam kết không?


1867

Gần đây tôi đã chuyển sang đồng bộ hóa kho lưu trữ của mình thành https: // trên GitHub (do sự cố tường lửa) và nó yêu cầu mật khẩu mỗi lần.

Có cách nào để lưu trữ thông tin đăng nhập, thay vì xác thực mỗi lần đó git pushkhông?



2
Bây giờ bạn có thể sử dụng một trình trợ giúp thông tin để mã hóa _netrctệp chứa thông tin đăng nhập của bạn. Xem câu trả lời của tôi dưới đây . Tôi thấy rằng an toàn hơn git-credential-winstore.exe(bộ nhớ cache) là một lỗi nhỏ trên Windows.
VonC


git-credential-winstorelàm việc tốt nhất cho Windows. Có 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 vài lần, nhưng nó 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

2
Theo "Chứng chỉ SSH" Tôi giả sử bạn có nghĩa là "Khóa riêng SSH."
Michael Mior

Câu trả lời:


2369

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), Git có một cơ chế gọn gàng để 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à trình trợ giúp thông tin xác thực . (Cảm ơn 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 những trợ giúp thông tin sau:

git config --global credential.helper cache

... Điều này nói với Git để giữ mật khẩu của bạn được lưu trong bộ nhớ trong (theo mặc định) 15 phút. Bạn có thể đặt thời gian chờ dài 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 ý rằng nếu bạn 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 gọi là Trình quản lý thông tin Git cho Windows hoặc 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ụnggnome-keyring (hoặc triển khai khóa khác như KWallet).

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

Với các phiên bản 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 sẽ cần thay đổi URL mà originđiều khiển từ xa của bạn sử dụng để bao gồm mật khẩu theo cách này:

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

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

Bạn có thể đặt URL mới cho originđiều khiển từ xa bằng:

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 httpsvà 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 gốc trong .gitthư mục của bạn , điều này 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 ~/.netrctệp của bạn , 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 ở dạng văn bản đơn giản và do đó ít 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 hostname của máy chủ, và <username><password>với tên truy cập và mật khẩu của bạn. Cũng nhớ đặt quyền truy cập hệ thống tệp hạn chế trên tệp đó:

chmod 600 ~/.netrc

Lưu ý rằng trên Windows, tệp này phải đượ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, xem:


72
Đừng lưu trữ mật khẩu của bạn trong văn bản đơn giản. 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 osxkeychaintrên OS X. Đối với các HĐH khác, hãy xem help.github.com/articles/set-up-git
dazonic

6
FWIW, công cụ móc khóa osx là một phần của mã nguồn GIT cơ bản, nó không phải là thành phần độc quyền của Brew hoặc MacPorts hay bất cứ hương vị nào của tháng. Và bạn thậm chí không cần phải xây dựng git từ đầu - chỉ cần cd contrib / cert / osxkeychain / và chạy make.
tổng

2
Với xác thực hai yếu tố, bạn phải sử dụng cái mà github gọi là Mã thông báo truy cập người . Trong thực tế, bạn nên luôn luôn sử dụng một mật khẩu, vì không giống như mật khẩu, bạn có thể kiểm soát quyền truy cập mà nó cung cấp. Chỉ cần thay thế mật khẩu trong url để bạn kết thúc 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

12
git config --global credential.helper cachekhông hoạt động trên windows: stackoverflow.com/questions/11693074/ sử dụng gitcredentialstore trên Windows một cách hạnh phúc
Sebastian J.

8
Bất kỳ cách nào để thiết lập thời gian chờ này đến vô cùng?
sudo

720

Bạn cũng có thể để 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 đăng nhập của bạn dưới dạng văn bản rõ ràng trong một tệp cục bộ (.git-thông tin đăng nhập) trong thư mục dự án của bạn (xem bên dưới để biết thư mục "nhà"). 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ộ đệm.

Nếu bạn muốn Git tiếp tục yêu cầu 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 thư mục .git-credentialscủa bạn %HOME%trái ngược với thư mục dự án: sử dụng --globalcờ

git config --global credential.helper store

7
Trên Windows, bạn có thể tải xuống tiện ích trợ giúp cấu hình mọi thứ để lưu trữ phiên bản được mã hóa của mật khẩu GIT của bạn trong Cửa hàng Tín dụng Windows, xem confluence.atlassian.com/display/STASH/iêu
Contango

76
Tôi thấy rằng tôi phải chỉ định --global hoặc nó sẽ cố lưu trữ các cài đặt trong kho lưu trữ hiện tại:git config --global credential.helper store
Brian Gordon

6
Tại sao sẽ làm bộ nhớ cache thay vì lưu trữ vĩnh viễn? Chia sẻ máy tính hay cái gì?
Michael J. Calkins

2
@BrianGordon Tôi đang sử dụng GIT 1.9.5 trên Windows và --globalcờ là không cần thiết. Ngay cả khi không có cờ này, tệp thông tin đăng nhập đã được tạo trong %USER_HOME%thư mục.
jFrenetic

2
Nếu không lưu trữ trong văn bản đơn giản, nó được bảo vệ với cái gì? Mật khẩu của bạn? Sau đó, bạn có phải hỏi mật khẩu quản trị viên khi bạn kết nối với git không? Không phải nhập mật khẩu để lấy mật khẩu khác một chút lạ sao?
Cruncher

101

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/ clonethao 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ã .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'


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

Với Windows:

(Git có gpg.exebả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 ý copylệ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ó.)

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

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

(Đả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.)

  • Tạo một tệp _netrc bằng 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 phần ' protocol': ' http' hoặc ' https' tùy thuộc vào URL bạn sẽ sử dụng.)

  • Mã hóa tập tin đó:

    gpg -e -r a_recipient _netrc

(Bây giờ bạn có thể xóa_netrc tệp, chỉ giữ lại tệp _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 ý ' /': 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.gpgtệ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)

contrib/credential/netrc: làm cho PERL_PATHcấu hình

Đã 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 .perltiề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-netrctừ 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)

contrib/credential/netrc: làm việc bên ngoài một repo

Đã ký tắt: Denton Liu

Hiện tại, git-credential-netrckhô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-netrckhô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 passvớ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"

1
đang thử điều tương tự trên linux .. git config --local cert.rcper "netrc -f /home/me/.netrc.gpg -v -d" ..và tôi nhận được "git: 'cert-netrc' không phải là một lệnh git. xem 'git --help' "
nắng

4
@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 sao chép git-credential-netrcbất cứ nơi nào trong đường dẫn của bạn ( $PATH), để git có thể gọi ' credential-netrc'.
VonC

Chà, cái _netrcnày không hoạt động với tôi trên Windows 7PC, nhưng cái này .netrchoạt động với youtube-dl với --netrcđối số được truyền cho nó.
Iulian Onofrei

@VonC URL hiện tại dường như là https://raw.githubusercontent.com/git/git/master/contrib/credential/netrc/git-credential-netrc.perl(đường ống trong bảy năm sau)
Gwyneth Llewelyn

1
@GwynethLlewelyn Cảm ơn bạn. Tôi đã chỉnh sửa câu trả lời cho phù hợp. Đừng ngần ngại chỉnh sửa nó nếu bạn thấy bất kỳ thông tin lỗi thời nào khác.
VonC

43

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 với 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ể chỉ cần 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ể thích chuyển sang SSH hoặc sử dụng phần mềm máy khách GitHub.


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

43

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

Đối với Git 2.11+ trên OS XLinux , hãy sử dụng kho thông tin xác thực được tích hợp trong Git :

git config --global credential.helper libsecret

Đối với msysgit 1.7.9+ trên Windows :

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

2
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

1
Cảm ơn, nhưng tôi nhận được cùng một lỗi. Tôi có làm điều gì sai? Tôi gõ lệnh và không có gì xảy ra. Ngay khi tôi đẩy, tôi đã yêu cầu thông tin đăng nhập, tôi đã chèn thành công, nhưng tôi nhận được lỗi, đó không phải là lệnh git sau khi làm điều đó.
codepleb

2
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

1
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 mình 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

3
Vấn đề bảo mật: trình quản lý thông tin Windows làm cho mật khẩu văn bản gốc của bạn có thể truy cập được đối với bất kỳ ai đăng nhập vào tài khoản Windows của bạn. 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, chẳng hạn như printf "protocol=https\nhost=git.mycompany.com\n" | git credential-manager get( chi tiết hơn ở đây ). Bạn phải 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.
cjs

40

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 trong tệp .git-certs 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 một thư mục được bảo vệ).

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

git-credential-store


3
Đối với Git cho Windows 2.7.3 (Tháng 3 năm 2016): github.com/git-for-windows/git/release?after=v2.8.4.windows.1 , đó sẽ là git config credential.helper managerthay thế
VonC

23

Điều đó rõ ràng ngay lập tức với tôi rằng tôi cần tải xuống trình trợ giúp trước! Tôi đã tìm thấy bản tải xuống cert.rcper tại Atlassian 'Xác thực vĩnh viễn với kho Git .

Trích dẫn:

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

Tải xuống nhị phân git-cert-osxkeychain.

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

chmod a+x git-credential-osxkeychain

Đặt nó trong thư mục /usr/local/bin.

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

git config --global credential.helper osxkeychain

23

Chỉ cần bao gồm thông tin đă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

Lưu ý: Tôi không khuyến nghị phương pháp này, nhưng nếu bạn đang vội và không có gì khác hoạt động, bạn có thể sử dụng phương pháp này.


12
nó sẽ hoạt động bạn phải thoát @ với% 40 trong id email của bạn
Tarun Gupta

Điều gì xảy ra nếu chúng ta có '+' trong id email? Tôi đã cố gắng trốn thoát tương tự nhưng người đẩy nói 'không tìm thấy repo'
killjoy

4
có% 2B thay vì +
Tarun Gupta

Lưu trữ mật khẩu trong văn bản gốc và dễ dàng truy cập có thể không phải là giải pháp tối ưu.
giảm hoạt động

20

Trên thiết lập GNU / Linux, ~ / .netrc cũng 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 để vận chuyển HTTPS .


4
Hãy chắc chắn cũng có chmod 0600 ~/.netrc.
poolie

Chỉ muốn để lại một liên kết ở đây đến trang web netrc Ubuntu . Tôi cần tạo nó cho người dùng khác (/home/git/.netrc) sau đó thay đổi quyền sở hữu cho người dùng đó.
zacharydl

17

Đối với Windows, bạn có thể sử dụng plugin Trình quản lý xác thực Git (GCM). Nó hiện đang được duy trì bởi Microsoft. Điều tuyệt vời là nó lưu mật khẩu trong Cửa hàng Thông tin Windows, 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 tích hợp. Nó cho phép xác thực hai yếu tố cho GitHub (và các máy chủ khác). Và có một giao diện đồ họa để đăng nhập ban đầu.

Đối với người dùng Cygwin (hoặc người dùng đã sử dụng Git chính thức cho Windows), 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, và sau đó chạy install.cmdtệp. Điều này sẽ cài đặt vào ~/binthư mục của bạn . (Hãy chắc chắn rằng ~/binthư mục của bạn nằm trong PATH của bạn.) Sau đó, bạn định 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.exekhi xác thực với bất kỳ máy chủ nào.


3
Bất kỳ ai đăng nhập vào tài khoản của bạn đều có quyền truy cập dễ dàng vào bản rõ của 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, chẳng hạn như printf "protocol=https\nhost=git.mycompany.com\n" | git credential-manager get( chi tiết hơn ở đây ). Bạn phải 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.
cjs

13

Nếu bạn không muốn lưu trữ mật khẩu của mình trong văn bản gốc như Mark đã nói, bạn có thể sử dụng URL GitHub khác để tìm nạp hơn bạn thực hiện để đẩy. Trong tệp cấu hình của bạn, bên dưới [remote "origin"]:

url = git://github.com/you/projectName.git
pushurl = git@github.com:you/projectName.git

Nó vẫn sẽ yêu cầu mật khẩu khi bạn đẩy, nhưng không phải khi bạn tìm nạp, ít nhất là cho các dự án nguồn mở.


12

Ôi

Bạn có thể tạo mã thông báo API cá nhân của riêng bạn ( OAuth ) và sử dụng nó giống như cách bạn sử dụng thông tin đăng nhập thông thường của mình (tại /settings/tokens:). Ví dụ:

git remote add fork https://4UTHT0KEN@github.com/foo/bar
git push fork

.netrc

Một phương pháp khác là định cấu hình người dùng / mật khẩu của bạn trong ~/.netrc( _netrctrên Windows), vd

machine github.com
login USERNAME
password PASSWORD

Đối với HTTPS, thêm dòng bổ sung:

protocol https

Một người trợ giúp thông tin

Để lưu mật khẩu GitHub của bạn trong Git khi sử dụng HTTPS, bạn có thể sử dụng trình trợ giúp thông tin xác thực để bảo Git nhớ tên người dùng và mật khẩu GitHub của bạn mỗi khi nói chuyện với GitHub.

  • Mac: git config --global credential.helper osxkeychain( osxkeychain helperlà bắt buộc),
  • Các cửa sổ: git config --global credential.helper wincred
  • Linux và khác: git config --global credential.helper cache

Liên quan:


10

Bạn có thể sử dụng người trợ giúp thông tin.

git config --global credential.helper 'cache --timeout=x'

nơi xlà số giây.


7
Đó là số giây ... Một số thiên tài đã cập nhật nó dưới dạng mili giây và mọi người đã phê duyệt nó mà không cần kiểm tra. Xin đừng lừa dối mọi người nếu bạn không biết câu trả lời. Cảm ơn!
Charan

Bạn có thể cung cấp một liên kết đến một nơi store, cachevà những điều phổ biến khác được liệt kê và giải thích?
Notinlist

3
Bạn có muốn đề cập đến thực tế rằng điều này thực sự không, trừ khi bạn gọi một lệnh cụ thể khác để sử dụng 'bộ đệm' làm người quản lý trước? Công cụ này rất khó hiểu, tất cả các câu trả lời này đều không đầy đủ và không có câu trả lời nào trong số chúng hoạt động. Vô cùng bực bội. Thay vào đó, hãy xem phần này: stackoverflow.com/a/24800870/88409
Triynko

10

Sau khi sao chép kho lưu trữ repo, bạn có thể chỉnh sửa repo/.git/configvà thêm một số cấu hình như bên dưới:

[user]
    name = you_name
    password = you_password
[credential]
    helper = store

Sau đó, bạn sẽ không được yêu cầu usernamepasswordmột lần nữa.


Hoạt động với tôi với helper = manager(nhưng tôi đã yêu cầu tên người dùng + repo cho lần đẩy đầu tiên).
Stéphane Laurent

với helper = manager Tôi đang gặp lỗi - trình quản lý không phải là lệnh git
Kapil

Thật không may git bỏ qua mật khẩu trong tập tin cấu hình. .git_credentials với cert.store là tùy chọn duy nhất.
Avamander

9

Tôi biết đây không phải là một giải pháp an toàn, nhưng đôi khi bạn chỉ cần một giải pháp đơn giản - không cần cài đặt bất cứ thứ gì khác. Và vì helper = store không hoạt động với tôi, tôi đã tạo ra một người trợ giúp giả:

Tạo một tập lệnh và đặt nó vào thư mục bin người dùng của bạn, ở đây có tên là uy tín , tập lệnh này sẽ cung cấp tên người dùng và mật khẩu của bạn:

#!/bin/bash
while read line
do
  echo "$line"
done < "/dev/stdin"
echo username=mahuser
echo password=MahSecret12345

làm cho nó thực thi:

chmod u+x /home/mahuser/bin/credfake

sau đó cấu hình nó trong git:

git config --global credential.helper /home/mahuser/bin/credfake

(hoặc sử dụng nó mà không có --global chỉ cho một repo)

và - voilá - git sẽ sử dụng mật khẩu + người dùng này.


Tôi đồng ý. Giải pháp đơn giản (nếu không an toàn) thực sự. +1, miễn là bạn biết bạn đang làm gì.
VonC

7

Mã thông báo xác thực nên được sử dụng thay vì mật khẩu tài khoản. Chuyển đến cài đặt / ứng dụng GitHub và sau đó tạo mã thông báo truy cập cá nhân. Mã thông báo có thể được sử dụng giống như cách sử dụng mật khẩu.

Mã thông báo nhằm cho phép người dùng không sử dụng mật khẩu tài khoản cho công việc dự án. Chỉ sử dụng mật khẩu khi thực hiện công việc quản trị, như tạo mã thông báo mới hoặc thu hồi mã thông báo cũ.


Thay vì mã thông báo hoặc mật khẩu cấp cho toàn bộ người dùng quyền truy cập vào tài khoản GitHub, khóa triển khai cụ thể của dự án có thể được sử dụng để cấp quyền truy cập vào kho lưu trữ dự án duy nhất. Dự án Git có thể được cấu hình để sử dụng khóa khác nhau này trong các bước sau khi bạn vẫn có thể truy cập các tài khoản hoặc dự án Git khác với thông tin xác thực thông thường của bạn:

  1. Viết tệp cấu hình SSH có chứa Host, IdentityFilecho khóa triển khai, có thể UserKnownHostsFilevà có thể User(mặc dù tôi nghĩ rằng bạn không cần nó).
  2. Viết một kịch bản shell trình bao bọc SSH mà hầu như là ssh -F /path/to/your/config $*
  3. Chuẩn bị GIT_SSH=/path/to/your/wrappertrước lệnh Git bình thường của bạn. Ở đây git remote(nguồn gốc) phải sử dụng git@github.com:user/project.gitđịnh dạng.

7

Tốt hơn là sử dụng thông tin đăng nhập để bảo mật, nhưng bạn có thể giữ thông tin đó trong một thời gian bằng cách sử dụng bộ đệm:

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

Thông tin đăng nhập của bạn sẽ được lưu trong 3600 giây.


Có nghĩa là sau 3600 giây, chúng ta phải nhập lại mật khẩu ??? Làm thế nào để cứu họ vĩnh viễn?
HoàngVu

$ git config cert.rcper 'cache --timeout = 3600' lỗi: không thể khóa tệp cấu hình .git / config: Không có tệp hoặc thư mục như vậy
PlantationGator

Điều này đã hoạt động: git config --global cert.rcper 'cache --timeout = 3600'
PlantationGator

@Tama Tôi biết đã ba năm rồi, nhưng bạn có thể bỏ đi --timeoutvà thông tin đăng nhập sẽ được lưu trữ mãi mãi.
Neil Chowdhury

Cái này có hoạt động bên trong một Docker container (dựa trên windowsservercore) không?
Peter Mortensen

5

Mọi thứ sẽ khác một chút nếu bạn đang sử dụng xác thực hai yếu tố như tôi. Vì tôi không tìm thấy câu trả lời hay ở nơi nào khác, tôi sẽ dán một câu ở đây để có thể tôi sẽ tìm thấy câu trả lời sau.

Nếu bạn đang sử dụng xác thực hai yếu tố, thì việc chỉ định tên người dùng / mật khẩu sẽ không hoạt động - bạn sẽ bị từ chối truy cập. Nhưng bạn có thể sử dụng mã thông báo truy cập ứng dụng và sử dụng trình trợ giúp thông tin xác thực của Git để lưu trữ bộ đệm đó cho bạn. Dưới đây là các liên kết thích hợp:

Và tôi không nhớ tôi đã nhìn thấy cái này ở đâu, nhưng khi bạn hỏi tên người dùng của bạn - đó là nơi bạn dán mã thông báo truy cập ứng dụng. Sau đó để trống mật khẩu. Nó hoạt động trên máy Mac của tôi.


khi sử dụng xác thực 2 chiều, bạn sử dụng "mã thông báo truy cập" làm mật khẩu. tên người dùng vẫn giữ nguyên như mọi khi
Ben Yitzhaki

4

Điều này hoạt động với tôi Tôi đang sử dụng Windows 10

git config --global credential.helper wincred

4

Thông thường bạn có một URL từ xa, một cái gì đó như thế này,

git remote -v

origin    https://gitlab.com/username/Repo.git (fetch)
origin    https://gitlab.com/username/Repo.git (push)

Nếu bạn muốn bỏ qua tên người dùng và mật khẩu trong khi sử dụng git push, hãy thử điều này:

 git remote set-url origin https://username:password@gitlab.com/username/Repo.git

Tôi vừa thêm URL tương tự (có chi tiết người dùng bao gồm mật khẩu) vào nguồn gốc.

LƯU Ý: Nó không hoạt động nếu tên người dùng là Id email.

git remote -v

origin    https://username:password@gitlab.com/username/Repo.git (fetch)
origin    https://username:password@gitlab.com/username/Repo.git (push)

3

Tôi đã nhận được câu trả lời của mình từ Trang hướng dẫn gitcredentials (7) . Đối với trường hợp của tôi, tôi không có bộ đệm thông tin xác thực trong cài đặt Windows của mình; Tôi sử dụng cửa hàng ủy nhiệm.

Sau khi tôi sử dụng cửa hàng thông tin xác thực, tên người dùng / mật khẩu được lưu trữ trong [thư mục người dùng] /. Git-thông tin đăng nhập. Để xóa tên người dùng / mật khẩu, chỉ cần xóa nội dung của tệp.


2
Khi bạn không có bộ đệm thông tin xác thực trong các cửa sổ của mình, tôi sẽ đề nghị sử dụng git config --global credential.helper wincredmật khẩu lưu trữ này vĩnh viễn.
Chetabahana

2

Tài liệu của nhà soạn nhạc đề cập rằng bạn có thể ngăn nó sử dụng API GitHub, để nó hoạt động như git clonesau:

Nếu bạn đặt no-apikhóa thành truekho lưu trữ GitHub, nó sẽ sao chép kho lưu trữ như với bất kỳ kho lưu trữ Git nào khác thay vì sử dụng API GitHub. Nhưng không giống như sử dụng gittrình điều khiển trực tiếp, nhà soạn nhạc vẫn sẽ cố gắng sử dụng các tệp zip của GitHub.

Vì vậy, phần sẽ trông như thế này:

"repositories": [
    {
        "type": "vcs",
        "no-api": true,
        "url": "https://github.com/your/repo"
    }
],

Hãy nhớ rằng API là có lý do. Vì vậy, đây nên là một phương pháp cuối cùng liên quan đến việc tăng tải trên github.com.


Không chắc chắn câu trả lời này có liên quan gì đến câu hỏi ban đầu.
Charles Oppermann

2

Bạn cũng chỉnh sửa tệp bashrc và thêm một tập lệnh trong đó.

Điều này sẽ yêu cầu mật khẩu của bạn một lần khi bạn khởi động Git và sau đó ghi nhớ nó cho đến khi bạn đăng xuất.

SSH_ENV=$HOME/.ssh/environment
  
# Start the ssh-agent
function start_agent {
    echo "Initializing new SSH agent..."

    # Spawn ssh-agent
    /usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"
    echo succeeded
    chmod 600 "${SSH_ENV}"
    . "${SSH_ENV}" > /dev/null
    /usr/bin/ssh-add
}
  
if [ -f "${SSH_ENV}" ]; then
     . "${SSH_ENV}" > /dev/null
   ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
      start_agent;
  }
else
    start_agent;
fi

0

Nếu bạn đang sử dụng osxkeychain và có một mã thông báo hết hạn và muốn cập nhật nó, hãy làm theo các bước sau:

Chạy trong terminal, sau đó nhấn enter hai lần.

git credential-osxkeychain erase
 host=github.com
 protocol=https

Bây giờ bạn sẽ được nhắc nhập tên người dùng / mật khẩu. Tuy nhiên, đôi khi có vẻ như điều này không 'mất' và bạn phải tiếp tục nhập lại.

Nếu vậy, hãy khởi động lại máy tính của bạn . Bây giờ, lần tới khi bạn chạy lệnh git và nhập tên người dùng / mật khẩu, nó sẽ được lưu lại.

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.