Tôi muốn sử dụng tính năng đẩy và kéo tự động trong GitExtension , mà không cần nhập người dùng và mật khẩu của mình vào một dấu nhắc, mọi lúc.
Vậy làm thế nào tôi có thể lưu thông tin đăng nhập của tôi trong git?
Tôi muốn sử dụng tính năng đẩy và kéo tự động trong GitExtension , mà không cần nhập người dùng và mật khẩu của mình vào một dấu nhắc, mọi lúc.
Vậy làm thế nào tôi có thể lưu thông tin đăng nhập của tôi trong git?
Câu trả lời:
Chạy
git config --global credential.helper store
sau đó
git pull
cung cấp tên người dùng và mật khẩu và những chi tiết đó sẽ được ghi nhớ sau. Thông tin đăng nhập được lưu trữ trong một tệp trên đĩa, với các quyền của đĩa "chỉ người dùng có thể đọc / ghi được" nhưng vẫn ở dạng bản rõ.
Nếu bạn muốn thay đổi mật khẩu sau
git pull
Sẽ thất bại, vì mật khẩu không chính xác, git sau đó xóa người dùng + mật khẩu vi phạm khỏi ~/.git-credentials
tệp, vì vậy bây giờ chạy lại
git pull
để cung cấp một mật khẩu mới để nó hoạt động như trước.
Bạn có thể sử dụng git config
để kích hoạt lưu trữ thông tin đăng nhập trong git.
git config --global credential.helper store
Khi chạy lệnh này, lần đầu tiên bạn kéo hoặc đẩy từ kho lưu trữ từ xa, bạn sẽ được hỏi về tên người dùng và mật khẩu.
Sau đó, để liên lạc với kho lưu trữ từ xa, bạn không phải cung cấp tên người dùng và mật khẩu.
Định dạng lưu trữ là một .git-credentials
tệp, được lưu trữ trong bản rõ.
Ngoài ra, bạn có thể sử dụng các trình trợ giúp khác cho git config credential.helper
bộ nhớ cache, cụ thể là:
git config credential.helper cache <timeout>
trong đó có một tùy chọn timeout parameter
, xác định thời gian thông tin đăng nhập sẽ được lưu trong bộ nhớ. Sử dụng trình trợ giúp, thông tin đăng nhập sẽ không bao giờ chạm vào đĩa và sẽ bị xóa sau khi hết thời gian quy định. Các default
giá trị900 seconds (15 minutes).
CẢNH BÁO : Nếu bạn sử dụng phương pháp này, mật khẩu tài khoản git của bạn sẽ được lưu ở plaintext
định dạng global .gitconfig file
, ví dụ như trong linux, nó sẽ là/home/[username]/.gitconfig
Nếu điều này là không mong muốn với bạn, ssh key
thay vào đó hãy sử dụng tài khoản của bạn.
git config credential.helper cache
mật khẩu sẽ không được lưu vào một tệp, chỉ được lưu trong bộ nhớ. Xem: git-scm.com/docs/git-credential-cache
Phương pháp được đề xuất và bảo mật: SSH
Tạo một khóa Github ssh. Tới github.com -> Settings -> SSH và GPG phím -> New SSH Key. Bây giờ lưu khóa riêng của bạn vào máy tính của bạn.
Sau đó, nếu khóa riêng được lưu dưới dạng id_rsa trong thư mục ~ / .ssh / , chúng tôi sẽ thêm nó để xác thực như sau:
ssh-add -K ~/.ssh/id_rsa
Một phương pháp an toàn hơn: Bộ nhớ đệm
Chúng tôi có thể sử dụng git-cert-store để lưu tên người dùng và mật khẩu trong một khoảng thời gian. Chỉ cần nhập thông tin sau vào CLI (terminal hoặc dấu nhắc lệnh):
git config --global credential.helper cache
Bạn cũng có thể đặt khoảng thời gian chờ (tính bằng giây) như sau:
git config --global credential.helper 'cache --timeout=3600'
Một phương pháp thậm chí ít an toàn hơn
Git-cert-store cũng có thể được sử dụng, nhưng lưu mật khẩu trong tệp văn bản đơn giản trên đĩa của bạn như sau:
git config credential.helper store
Câu trả lời lỗi thời - Nhanh chóng và không an toàn
Đây là một phương pháp không an toàn để lưu trữ mật khẩu của bạn trong văn bản thuần túy. Nếu ai đó giành quyền kiểm soát máy tính của bạn, mật khẩu của bạn sẽ bị lộ!
Bạn có thể đặt tên người dùng và mật khẩu của mình như thế này:
git config --global user.name "your username"
git config --global user.password "your password"
Trong Terminal, nhập thông tin sau:
# Set git to use the credential memory cache
git config --global credential.helper cache
Theo mặc định, Git sẽ lưu mật khẩu của bạn trong 15 phút.
Để thay đổi thời gian chờ bộ đệm mật khẩu mặc định, hãy nhập như sau:
# Set the cache to timeout after 1 hour (setting is in seconds)
git config --global credential.helper 'cache --timeout=3600'
cache
một phần với store
. Vì vậy, lệnh đầy đủ sẽ là : git config --global credential.helper store
. Lưu ý rằng điều này sẽ lưu mật khẩu của bạn trong một tệp văn bản mở (không có bất kỳ mã hóa nào, có thể nói là vậy).
--timeout
tham số là gì?
Bạn có thể chỉnh sửa ~/.gitconfig
tệp để lưu trữ thông tin đăng nhập của bạn
sudo nano ~/.gitconfig
Mà nên có
[user]
email = your@email.com
user = gitUSER
Bạn nên thêm ở dưới cùng của tập tin này.
[credential]
helper = store
Lý do tôi khuyên bạn nên tùy chọn này là vì nó là toàn cầu và nếu tại bất kỳ thời điểm nào bạn cần xóa tùy chọn bạn biết nơi để đi và thay đổi nó.
CHỈ SỬ DỤNG TÙY CHỌN NÀY TRONG MÁY TÍNH CÁ NHÂN.
Sau đó khi bạn kéo | nhân bản | nhập mật khẩu git của bạn, nói chung, mật khẩu sẽ được lưu ở ~/.git-credentials
định dạng
https://GITUSER:GITPASSWORD@DOMAIN.XXX
Ở ĐÂU DOMAIN.XXX COULD ĐƯỢC GITHUB.COM | BITBucksET.ORG | KHÁC
Xem tài liệu
Chỉ cần đặt thông tin đăng nhập của bạn vào Url như thế này:
https://Username
:Password
@github.com/myRepoDir/myRepo.git
Bạn có thể lưu trữ nó như thế này:
git remote add myrepo https://Userna...
... ví dụ để sử dụng nó:
git push myrepo master
Bây giờ đó là Liệt kê các bí danh url:
git remote -v
... và đó là lệnh xóa một trong số chúng:
git remote rm myrepo
git@github.com:Username/myRepo.git
https
, không ssh
, do đó, một giải pháp như thế này có thể hữu ích ở đó. Cũng lưu ý rằng bạn có thể sử dụng mã thông báo oauth, an toàn hơn một chút so với mật khẩu GitHub của bạn.
Đối với cài đặt chung, mở thiết bị đầu cuối (từ bất kỳ nơi nào) chạy như sau:
git config --global user.name "your username"
git config --global user.password "your password"
Do đó, mọi repo git cục bộ mà bạn có trên máy sẽ sử dụng thông tin đó.
Bạn có thể cấu hình riêng cho từng repo bằng cách thực hiện:
chạy như sau:
git config user.name "your username"
git config user.password "your password"
Nó chỉ ảnh hưởng đến thư mục đó (vì cấu hình của bạn là cục bộ).
--local
thẻ nhưng một lần nữa không có gì xảy ra
Bạn có thể sử dụng git-cert-store để lưu trữ mật khẩu của bạn không được mã hóa trên đĩa, chỉ được bảo vệ bởi các quyền của hệ thống tệp.
Thí dụ
$ git config credential.helper store
$ git push http://example.com/repo.git
Username: <type your username>
Password: <type your password>
[several days later]
$ git push http://example.com/repo.git
[your credentials are used automatically]
Bạn có thể kiểm tra thông tin đăng nhập được lưu trong tệp ~/.git-credentials
Để biết thêm thông tin, hãy truy cập git-cert-store - Trình trợ giúp lưu trữ thông tin đăng nhập trên đĩa
Bạn sẽ an toàn hơn nếu bạn sử dụng xác thực SSH so với xác thực tên người dùng / mật khẩu.
Nếu bạn đang sử dụng máy Mac, xác thực máy khách SSH được tích hợp vào móc khóa MacOS. Khi bạn đã tạo khóa SSH, hãy nhập vào thiết bị đầu cuối của bạn:
ssh-add -K ~/.ssh/id_rsa
Điều này sẽ thêm khóa riêng SSH vào móc khóa MacOS. Máy khách git sẽ sử dụng ssh khi kết nối với máy chủ từ xa. Miễn là bạn đã đăng ký khóa công khai ssh của mình với máy chủ, bạn sẽ ổn.
SSH
. Sử dụng xác thực HTTP, ai đó đánh cắp thông tin đăng nhập sẽ chỉ có quyền truy cập GitHub/GitLab
. Ngoài ra mã thông báo được thiết kế để có một cuộc sống hạn chế.
Sau khi xem qua hàng tá bài viết SO, blog, v.v., tôi đã thử mọi phương pháp, và đây là những gì tôi nghĩ ra. Nó bao gồm MỌI THỨ.
Đây là tất cả các cách và công cụ để bạn có thể xác thực an toàn git để sao chép kho lưu trữ mà không cần nhắc mật khẩu tương tác .
Muốn chỉ hoạt động ™? Đây là viên đạn bạc ma thuật.
Nhận Mã thông báo truy cập của bạn (xem phần trong áo choàng nếu bạn cần các hướng dẫn Github hoặc Gitea cho điều đó) và đặt nó trong một biến môi trường (cả cho nhà phát triển và triển khai cục bộ):
MY_GIT_TOKEN=xxxxxxxxxxxxxxxx
Đối với Github, sao chép và chạy các dòng này nguyên văn :
git config --global url."https://api:$MY_GIT_TOKEN@github.com/".insteadOf "https://github.com/"
git config --global url."https://ssh:$MY_GIT_TOKEN@github.com/".insteadOf "ssh://git@github.com/"
git config --global url."https://git:$MY_GIT_TOKEN@github.com/".insteadOf "git@github.com:"
Xin chúc mừng, giờ đây, bất kỳ công cụ tự động nào nhân bản kho git sẽ không bị cản trở bởi một dấu nhắc mật khẩu, cho dù sử dụng https hay kiểu url của ssh url.
Không sử dụng Github?
Đối với các nền tảng khác (Gitea, Github, Bitbucket), chỉ cần thay đổi URL. Không thay đổi tên người dùng (mặc dù tùy ý, chúng cần cho các mục cấu hình riêng biệt).
Khả năng tương thích
Điều này hoạt động cục bộ trong MacOS, Linux, Windows (ở Bash), Docker, CircleCI, Heroku, Akkeris, v.v.
Thêm thông tin
Xem phần ".gitconfig thayOf" của áo.
Bảo vệ
Xem phần "Bảo mật" của áo.
git config --global credential."https://somegithost.com".username MyUserName
, trong áo của bạn, nhưng không phải bất cứ nơi nào khác trong chủ đề trả lời này. Giải pháp cụ thể đó không trả lời câu hỏi của OP, nhưng nó đã trả lời câu hỏi của tôi, cảm ơn!
Trong trường hợp đó, bạn cần người trợ giúp thông tin git để báo cho git nhớ mật khẩu và tên người dùng GitHub của bạn bằng cách sử dụng dòng lệnh sau:
git config --global credential.helper wincred
và nếu bạn đang sử dụng repo bằng khóa SSH thì bạn cần khóa SSH để xác thực.
Không có câu trả lời nào ở trên làm việc cho tôi. Tôi tiếp tục nhận được những điều sau đây mỗi lần tôi muốn fetch
hoặc pull
:
Enter passphrase for key '/Users/myusername/.ssh/id_rsa':
Dành cho máy Mac
Tôi đã có thể ngăn không cho nó hỏi cụm mật khẩu của mình bằng cách:
vi ~/.ssh/config
UseKeychain yes
:wq!
Cho cửa sổ
Tôi đã có thể làm cho nó hoạt động bằng cách sử dụng thông tin trong stackexchange này: https://unix.stackexchange.com/a/12201/348665
Ngoài việc chỉnh sửa ~/.gitconfig
tệp, bạn có thể làm gì nếu bạn hỏi:
git config --local --edit
hoặc là
git config --global --edit
git config --local user.name 'your username'
git config --local user.password 'your password'
hoặc là
git config --global user.name 'your username'
git config --global user.password 'your password'
Tên người dùng và mật khẩu của bạn có thể sử dụng một số ký tự sẽ phá vỡ mật khẩu của bạn nếu bạn sử dụng dấu ngoặc kép.
--local
hoặc --global
có nghĩa là các thông số cấu hình được lưu cho dự án hoặc cho người dùng os.
chỉ dùng
git config --global credential.helper store
và thực hiện thao tác git , nó sẽ hỏi tên người dùng và mật khẩu, từ giờ nó sẽ không cung cấp bất kỳ lời nhắc nào cho tên người dùng và mật khẩu, nó sẽ lưu trữ các chi tiết
.git-credentials
là nơi tên người dùng và mật khẩu của bạn (mã thông báo truy cập) được lưu trữ khi bạn chạy git config --global credential.helper store
, đó là những gì các câu trả lời khác gợi ý, sau đó nhập tên người dùng và mật khẩu hoặc mã thông báo truy cập:
https://${username_or_access_token}:${password_or_access_token}@github.com
Vì vậy, để lưu tên người dùng và mật khẩu (mã thông báo truy cập):
git config —-global credential.helper store
echo “https://${username}:${password_or_access_token}@github.com“ > ~/.git-credentials
Điều này rất hữu ích cho robot github, ví dụ: để giải quyết các bản dựng Chuỗi tự động trong cùng một kho chứa docker bằng cách có các quy tắc cho các nhánh khác nhau và sau đó kích hoạt nó bằng cách đẩy nó vào post_push
hooker trong hub docker.
Một ví dụ về điều này có thể được nhìn thấy ở đây trong stackoverflow.
Một cách nhanh chóng để lưu thông tin đăng nhập git:
git config credential.helper 'cache' --timeout=10800
đẹp và an toàn
thời gian chờ là tính bằng giây.
Sau khi đọc chủ đề đầy đủ và thử nghiệm hầu hết các câu trả lời cho câu hỏi này, cuối cùng tôi đã tìm thấy quy trình phù hợp với mình. Tôi muốn chia sẻ nó trong trường hợp ai đó phải xử lý một trường hợp sử dụng phức tạp nhưng vẫn không muốn xem toàn bộ chủ đề và các trang gitcredentials , gitcredentials-store, v.v., như tôi đã làm.
Tìm bên dưới quy trình tôi đề nghị NẾU bạn (như tôi) phải đối phó với một số kho lưu trữ từ một số nhà cung cấp (GitLab, GitHub, Bitbucket, v.v.) bằng cách sử dụng một số kết hợp tên người dùng / mật khẩu khác nhau. Thay vào đó, nếu bạn chỉ có một tài khoản duy nhất để làm việc, thì bạn có thể sử dụng các giải pháp git config --global credential.helper store
hay, git config --global user.name "your username"
v.v. đã được giải thích rất rõ trong các câu trả lời trước đó.
Giải pháp của tôi:
> git config --global --unset credentials.helper
> cd /path/to/my/repo
> git config --unset credential.helper
> git config credential.helper 'store --file ~/.git_repo_credentials'
Lưu ý : lệnh này tạo một tệp mới có tên ".git numpo_credentials" vào thư mục chính của bạn, nơi Git lưu thông tin đăng nhập của bạn. Nếu bạn không chỉ định tên tệp, Git sử dụng ".git_credentials" mặc định. Trong trường hợp này, chỉ cần ban hành lệnh sau sẽ làm:
> git config credential.helper store
git config credential.*.username my_user_name
Lưu ý : sử dụng "*" thường là ổn nếu kho của bạn đến từ cùng một nhà cung cấp (ví dụ: GitLab). Nếu thay vào đó, kho lưu trữ của bạn được lưu trữ bởi các nhà cung cấp khác nhau thì tôi khuyên bạn nên đặt rõ ràng liên kết đến nhà cung cấp cho mọi kho lưu trữ, như trong ví dụ sau (đối với GitLab):
git config credential.https://gitlab.com.username my_user_name
Tại thời điểm này, nếu bạn ban hành một lệnh yêu cầu thông tin đăng nhập của bạn (ví dụ git pull
), bạn sẽ được yêu cầu nhập mật khẩu tương ứng với "my_user_name". Điều này chỉ được yêu cầu một lần vì git lưu thông tin đăng nhập vào ".git numpo_credentials" và tự động sử dụng cùng một dữ liệu ở các lần truy cập tiếp theo.
Từ nhận xét của rifrol, trên Linux Ubuntu, từ câu trả lời này , đây là cách thức trong Ubuntu:
sudo apt-get install libsecret-1-0 libsecret-1-dev
cd /usr/share/doc/git/contrib/credential/libsecret
sudo make
git config --global credential.helper /usr/share/doc/git/contrib/credential/libsecret/git-credential-libsecret
Một số distro khác cung cấp nhị phân để bạn không phải xây dựng nó.
Trong OS X, nó thường được "xây dựng" với một mô-đun mặc định là "osxkeychain" để bạn có được nó miễn phí.
Kiểm tra tài liệu git chính thức:
Nếu bạn sử dụng phương thức truyền tải SSH để kết nối với điều khiển từ xa, bạn có thể có khóa mà không cần cụm mật khẩu, cho phép bạn chuyển dữ liệu một cách an toàn mà không cần nhập tên người dùng và mật khẩu. Tuy nhiên, điều này là không thể với các giao thức HTTP - mọi kết nối đều cần tên người dùng và mật khẩu. Điều này thậm chí còn khó hơn đối với các hệ thống có xác thực hai yếu tố, trong đó mã thông báo bạn sử dụng cho mật khẩu được tạo ngẫu nhiên và không thể phát hiện được.
May mắn thay, Git có một hệ thống thông tin có thể giúp với điều này. Git có một vài tùy chọn được cung cấp trong hộp:
Mặc định là không để cache. Mỗi kết nối sẽ nhắc bạn cho tên người dùng và mật khẩu của bạn.
Chế độ bộ nhớ cache Chế độ canh giữ các thông tin trong bộ nhớ trong một khoảng thời gian nhất định. Không có mật khẩu nào được lưu trữ trên đĩa và chúng sẽ bị xóa khỏi bộ đệm sau 15 phút.
Chế độ lưu trữ trên máy tính xách tay của Chế độ lưu trữ các thông tin xác thực vào một tệp văn bản đơn giản trên đĩa và chúng không bao giờ hết hạn. Điều này có nghĩa là cho đến khi bạn thay đổi mật khẩu cho máy chủ Git, bạn sẽ không bao giờ phải nhập lại thông tin đăng nhập. Nhược điểm của phương pháp này là mật khẩu của bạn được lưu trữ trong Cleartext trong một tệp đơn giản trong thư mục nhà của bạn.
Nếu bạn đang sử dụng máy Mac, Git đi kèm với chế độ của osxkeychain, có thể lưu thông tin đăng nhập vào móc khóa an toàn được đính kèm với tài khoản hệ thống của bạn. Phương pháp này lưu trữ thông tin đăng nhập trên đĩa và chúng không bao giờ hết hạn, nhưng chúng được mã hóa với cùng một hệ thống lưu trữ chứng chỉ HTTPS và tự động điền Safari.
Nếu bạn đang sử dụng Windows, bạn có thể cài đặt một trình trợ giúp có tên là Trình quản lý thông tin xác thực của Git cho Windows. Điều này tương tự với trình trợ giúp của osxkeychain, được mô tả ở trên, nhưng sử dụng Cửa hàng Thông tin Windows để kiểm soát thông tin nhạy cảm. Nó có thể được tìm thấy tại https://github.com/Microsoft/Git-Credential-Manager-for-Windows .
Bạn có thể chọn một trong các phương pháp này bằng cách đặt giá trị cấu hình Git:
$ git config --global credential.helper cache
$ git config --global credential.helper store