Tôi git push
làm việc với một kho lưu trữ Git từ xa.
Mỗi thứ push
sẽ nhắc tôi nhập liệu username
và password
. Tôi muốn tránh nó cho mỗi lần đẩy, nhưng làm thế nào để cấu hình để tránh nó?
Tôi git push
làm việc với một kho lưu trữ Git từ xa.
Mỗi thứ push
sẽ nhắc tôi nhập liệu username
và password
. Tôi muốn tránh nó cho mỗi lần đẩy, nhưng làm thế nào để cấu hình để tránh nó?
Câu trả lời:
Mở terminal để tạo khóa ssh:
cd ~ #Your home directory
ssh-keygen -t rsa #Press enter for all values
(Chỉ hoạt động nếu chương trình cam kết có khả năng sử dụng chứng chỉ / khóa ssh riêng & công khai)
Dưới đây là hướng dẫn về gen putty cho các bước trên
Bước này thay đổi, tùy thuộc vào cách thiết lập điều khiển từ xa của bạn.
Nếu đó là kho lưu trữ GitHub và bạn có quyền quản trị, hãy đi tới cài đặt và nhấp vào 'thêm khóa SSH'. Sao chép nội dung của bạn ~/.ssh/id_rsa.pub
vào trường có nhãn 'Khóa'.
Nếu kho lưu trữ của bạn được quản lý bởi người khác, hãy cung cấp cho quản trị viên của bạn id_rsa.pub
.
Nếu kho lưu trữ từ xa của bạn được quản lý bởi bạn, bạn có thể sử dụng lệnh này chẳng hạn:
scp ~/.ssh/id_rsa.pub YOUR_USER@YOUR_IP:~/.ssh/authorized_keys/id_rsa.pub
Nếu bạn đã thực hiện các bước trên và vẫn nhận được lời nhắc mật khẩu, hãy đảm bảo URL repo của bạn ở dạng
git+ssh://git@github.com/username/reponame.git
như trái ngược với
https://github.com/username/reponame.git
Để xem URL repo của bạn, hãy chạy:
git remote show origin
Bạn có thể thay đổi URL bằng:
git remote set-url origin git+ssh://git@github.com/username/reponame.git
[1] Phần này kết hợp câu trả lời từ Eric P
git remote set-url origin git@github.com:/username/projectname.git
Chạy lệnh sau để kích hoạt bộ đệm ẩn thông tin xác thực.
$ git config credential.helper store
$ git push https://github.com/repo.git
Username for 'https://github.com': <USERNAME>
Password for 'https://USERNAME@github.com': <PASSWORD>
Sử dụng cũng nên chỉ định bộ nhớ đệm hết hạn ,
git config --global credential.helper 'cache --timeout 7200'
Sau khi kích hoạt bộ đệm thông tin xác thực, nó sẽ được lưu trong 7200 giây (2 giờ) .
Lưu ý: Trình trợ giúp xác thực lưu trữ mật khẩu không được mã hóa trên đĩa cục bộ.
git
trang hướng dẫn: "Sử dụng trình trợ giúp này sẽ 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."
store
trợ giúp thông tin lưu trữ mật khẩu trên đĩa không được mã hóa.
git config --unset credential.helper
Nếu bạn đã thiết lập các khóa SSH và vẫn nhận được lời nhắc mật khẩu, hãy đảm bảo URL repo của bạn ở dạng
git+ssh://git@github.com/username/reponame.git
như trái ngược với
https://github.com/username/reponame.git
Để xem URL repo của bạn, hãy chạy:
git remote show origin
Bạn có thể thay đổi URL bằng git remote set-url
như vậy:
git remote set-url origin git+ssh://git@github.com/username/reponame.git
git init
cục bộ, sau đó cố gắng đẩy sau khi thêm điều khiển từ một repo mới trên trang web GitHub.
git@github.com/username/reponame.git
Chỉ cần sử dụng --repo
tùy chọn cho lệnh git đẩy. Như thế này:
$ git push --repo https://name:password@bitbucket.org/name/repo.git
git remote set-url origin https://name:password@github.com/repo.git
name@github.com/....git
hoạt động nếu bạn không bị cằn nhằn về mật khẩu mỗi lần.
git push --repo https://github.com/Username/repo
Nó hoạt động mà không cần .git
tiện ích mở rộng
Bạn có thể sử dụng git-cert-store thông qua
git config credential.helper store
nơi lưu trữ mật khẩu của bạn không được mã hóa trong hệ thống tệp :
Sử dụng trình trợ giúp này sẽ 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. Nếu đây không phải là một sự đánh đổi bảo mật có thể chấp nhận được, hãy thử git-cert-cache hoặc tìm một trình trợ giúp tích hợp với bộ nhớ an toàn do hệ điều hành của bạn cung cấp.
Sử dụng bộ đệm git-cert-cache theo mặc định sẽ lưu mật khẩu trong 15 phút.
git config credential.helper cache
để đặt thời gian chờ khác, hãy sử dụng --timeout
(ở đây 5 phút)
git config credential.helper 'cache --timeout=300'
- 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. Chạy phần sau trên dòng lệnh sẽ kích hoạt tính năng này :
git config --global credential.helper osxkeychain
. Bạn cũng cần lưu trữ thông tin đăng nhập trong Keychain bằng ứng dụng Keychain.- 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 dành 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 . [nhấn mạnh của tôi]
credential.helper cache
KHÔNG hoạt động. Nó phải git config --global credential.helper wincred
.
Bước 1 -
Tạo khóa SSH trên hệ thống linux của bạn bằng lệnh bên dưới
ssh-keygen -t rsa -b 4096 -C "your_email"
Nó sẽ yêu cầu mật khẩu và tên tệp (mặc định sẽ là ~ / .ssh / id_rsa, ~ / .ssh / id_rsa.pub)
Bước 2 -
Khi các tệp được tạo, thêm khóa công khai id_rsa.pub vào phần ssh tài khoản github.
Bước 3 -
Trên máy của bạn, thêm khóa riêng id_rsa vào ssh-agent bằng lệnh bên dưới
ssh-add ~/.ssh/id_rsa
Bước 4 -
Bây giờ hãy thêm url từ xa git@github.com: user_name / repo_name.git vào repo git cục bộ của bạn bằng cách sử dụng lệnh bên dưới.
git remote remove origin
git remote add origin git@github.com:user_name/repo_name.git
Đó là nó.
Dây khách git của bạn đến cửa hàng thông tin hệ điều hành của bạn. Ví dụ: trong Windows, bạn liên kết trình trợ giúp thông tin xác thực với wincred:
git config --global credential.helper wincred
Có cách nào để bỏ qua việc nhập mật khẩu khi sử dụng https: // trên GitHub không?
Trên hệ điều hành Windows sử dụng cái này thay vào đó, cái này hoạt động với tôi:
https://{Username}:{Password}@github.com/{Username}/{repo}.git
ví dụ
git clone https://{Username}:{Password}@github.com/{Username}/{repo}.git
git pull https://{Username}:{Password}@github.com/{Username}/{repo}.git
git remote add origin https://{Username}:{Password}@github.com/{Username}/{repo}.git
git push origin master
Chỉ muốn chỉ ra điều gì đó về giải pháp đã nói ở trên nhiều lần:
git config credential.helper store
Bạn có thể sử dụng bất kỳ lệnh nào yêu cầu mật khẩu sau này. Bạn không cần phải đẩy. (bạn cũng có thể lấy ví dụ) Sau đó, bạn sẽ không cần phải nhập lại tên người dùng / mật khẩu của mình.
Theo tôi biết, chỉ có hai cách an toàn : ssh hoặc passwd được mã hóa bằng cách sử dụng kho khóa .
cat ~/.ssh/id_rsa.pub
, dán nó ở đó, đặt tên và lưu nó (nếu bạn không có tệp đó, hãy tự tạo một tệp cho riêng mình ssh-keygen -t rsa
- chỉ cần Enter cho tất cả các lời nhắc);git remote set-url origin git+ssh://git@github.com/username/reponame.git
- bạn có thể kiểm tra trước bằng cách git remote -v
);touch t; git add t; git commit -m "test"; git push
và xác nhận có để tận hưởng thế giới không có mật khẩu .Nếu bạn chỉ sử dụng git config --global credential.helper store
như những người khác đã đề cập, mật khẩu không được mã hóa của bạn sẽ chỉ được lưu trữ trong một văn bản đơn giản ~/.git-credentials
mà không an toàn như âm thanh.
Cố gắng mã hóa nó thành
sudo apt-get install libgnome-keyring-dev
sudo make --directory=/usr/share/doc/git/contrib/credential/gnome-keyring
git config --global credential.helper /usr/share/doc/git/contrib/credential/gnome-keyring/git-credential-gnome-keyring
git config --global credential.helper store
Trong trường hợp này, bạn đang sử dụng
https://git@github.com/username/reponame.git
.
Giải pháp của tôi trên Windows:
ssh-keygen -t rsa
(Nhấn enter cho tất cả các giá trị)Your public key has been saved in /c/Users/<your_user_name_here>/.ssh/id_rsa.pub
Nếu PC của bạn an toàn hoặc bạn không quan tâm đến bảo mật mật khẩu, điều này có thể đạt được rất đơn giản. Giả sử rằng kho lưu trữ từ xa nằm trên GitHub và origin
là tên cục bộ của bạn cho kho lưu trữ từ xa, hãy sử dụng lệnh này
git remote set-url --push origin https://<username>:<password>@github.com/<repo>
Các --push
cờ đảm bảo điều này thay đổi URL của kho lưu trữ cho các git push
chỉ lệnh. (Câu hỏi đặt ra yêu cầu trong các bài bản gốc là về git push
lệnh mà thôi. Yêu cầu a username password + chỉ cho các hoạt động đẩy được thiết lập bình thường đối với công kho trên Lưu ý rằng GitHub. Tin kho trên GitHub cũng sẽ yêu cầu tên người dùng + mật khẩu cho kéo và lấy hoạt động , vì vậy đối với một kho lưu trữ riêng tư, bạn sẽ không muốn sử dụng --push flag
...)
CẢNH BÁO: Điều này vốn không an toàn vì:
ISP của bạn hoặc bất kỳ ai đăng nhập vào mạng của bạn đều có thể dễ dàng nhìn thấy mật khẩu bằng văn bản thuần túy trong URL;
Bất cứ ai có quyền truy cập vào PC của bạn đều có thể xem mật khẩu của bạn bằng cách sử dụng git remote show origin
.
Đó là lý do tại sao sử dụng khóa SSH là câu trả lời được chấp nhận.
Ngay cả khóa SSH cũng không hoàn toàn an toàn . Ví dụ, bất kỳ ai có quyền truy cập vào PC của bạn vẫn có thể thực hiện các cú đẩy làm hỏng kho lưu trữ của bạn hoặc - tệ hơn - đẩy các cam kết thực hiện các thay đổi tinh vi đối với mã của bạn. (Tất cả các cam kết được đẩy rõ ràng rất rõ ràng trên GitHub. Nhưng nếu ai đó muốn thay đổi mã của bạn một cách lén lút, họ có thể --amend
thực hiện một cam kết trước đó mà không thay đổi thông báo cam kết, sau đó buộc đẩy nó. Điều đó sẽ lén lút và khá khó để nhận thấy trong thực tế. )
Nhưng tiết lộ mật khẩu của bạn là tồi tệ hơn . Nếu kẻ tấn công có được kiến thức về tên người dùng + mật khẩu của bạn, họ có thể làm những việc như khóa bạn khỏi tài khoản của chính bạn, xóa tài khoản của bạn, xóa vĩnh viễn kho lưu trữ, v.v.
Ngoài ra - để đơn giản và bảo mật - bạn chỉ có thể cung cấp tên người dùng của mình trong URL, do đó bạn sẽ phải nhập mật khẩu mỗi lần git push
nhưng bạn sẽ không phải cung cấp tên người dùng của mình mỗi lần. (Tôi khá thích cách tiếp cận này, việc phải nhập mật khẩu sẽ khiến tôi tạm dừng để suy nghĩ mỗi lần tôi git push
, vì vậy tôi không thể git push
vô tình.)
git remote set-url --push origin https://<username>@github.com/<repo>
@
, nó đang phá vỡ mật khẩu suy nghĩ sau khi @ là một phần của máy chủ git?
Tất cả điều này phát sinh bởi vì git không cung cấp tùy chọn trong các lệnh sao chép / kéo / đẩy / tìm nạp để gửi thông tin đăng nhập thông qua một đường ống. Mặc dù nó cung cấp thông tin xác thực, nhưng nó lưu trữ trên hệ thống tệp hoặc tạo daemon, v.v. Thông thường, thông tin đăng nhập của GIT là cấp độ hệ thống và trách nhiệm để giữ an toàn cho chúng là trên ứng dụng gọi lệnh git. Thực sự rất không an toàn.
Đây là những gì tôi đã phải làm việc xung quanh. 1. Phiên bản Git (git --version) phải lớn hơn hoặc bằng 1.8.3.
ĐÁNH GIÁ
Để nhân bản, hãy sử dụng "git clone URL" sau khi thay đổi URL từ định dạng, http: // {myuser} @ {my numpo_ip_address} / {myrepo_name.git} thành http: // {myuser}: {mypwd} @ {my numpo_ip_add / nbmyrepo_name.git}
Sau đó thanh lọc kho lưu trữ mật khẩu như trong phần tiếp theo.
MUA
Bây giờ, điều này sẽ đi và
Nếu ứng dụng của bạn đang sử dụng Java để ban hành các lệnh này, hãy sử dụng ProcessBuilder thay vì Runtime. Nếu bạn phải sử dụng Runtime, hãy sử dụng getRunTime (). Exec, lấy mảng String làm đối số với / bin / bash và -c làm đối số thay vì đối số lấy một Chuỗi làm đối số.
GIT FETCH / PULL / PUSH