Câu hỏi Git push yêu cầu tên người dùng và mật khẩu


Tôi nhân bản một kho lưu trữ git từ tài khoản Github của tôi với PC của tôi.

Tôi muốn làm việc với cả PC và máy tính xách tay của tôi, nhưng với một tài khoản Github.

Khi tôi cố gắng để đẩy hoặc kéo từ Github bằng cách sử dụng máy tính của tôi, nó đòi hỏi tên người dùng và mật khẩu, nhưng không phải khi sử dụng máy tính xách tay!

Tôi không muốn nhập tên người dùng và mật khẩu của mình mỗi lần tôi tương tác với nguồn gốc. Những gì tôi đang thiếu ở đây?


1072
2017-07-03 20:25


gốc


Có nhưng tôi nên làm gì? Tôi tạo ra keygen những gì khác? - TooCooL
Bạn cần phải đăng ký pubkey với tài khoản Github của bạn (github.com/account/ssh) và định cấu hình ứng dụng khách SSH của bạn để sử dụng đúng tên người dùng. - jwodder
Tôi đã làm tất cả điều đó nhưng vẫn yêu cầu tên người dùng và mật khẩu! có thể sử dụng một tài khoản với hai máy tính không? - TooCooL
Câu hỏi này bao gồm tất cả các tùy chọn của bạn cho điều này khá tốt: stackoverflow.com/questions/5343068/… - ford
Không cần phải chuyển sang ssh nữa. Cũng có thể với HTTPS. Kiểm tra câu trả lời của tôi. - Varun Achar


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


Một lỗi phổ biến là nhân bản bằng cách sử dụng mặc định (HTTPS) thay vì SSH. Bạn có thể sửa lỗi này bằng cách vào kho lưu trữ của bạn, nhấp vào "Sao chép hoặc tải xuống", sau đó nhấp vào nút "Sử dụng SSH" phía trên trường URL và cập nhật URL của từ xa nguồn gốc của bạn như sau:

git remote set-url origin git@github.com:username/repo.git

Đây là tài liệu tại GitHub: Chuyển đổi các URL từ xa từ HTTPS sang SSH.


1582
2017-07-03 21:25



Và để tìm hiểu cách thay đổi URL, hãy truy cập tại đây: stackoverflow.com/a/2432799/60488 (spoiler: git remote set-url origin git://new.url.here) - Johan Kool
Có gì sai khi sử dụng https một lần nữa? - OscarRyz
Nếu bạn không thể sử dụng ssh cho các hạn chế bảo mật (như tôi), bạn có thể làm:git remote set-url origin https://name:password@github.org/repo.git  (trích xuất từ ​​một bình luận ở đây) - Bruno Berisso
Tại sao nhân bản với HTTPS là một sai lầm phổ biến? GitHub hiện khuyên dùng HTTPS. - Dennis
Sửa lỗi của tôi Permission denied (publickey) sử dụng hướng dẫn này: help.github.com/articles/generating-ssh-keys . - voltrevo


Xác thực vĩnh viễn với kho Git,

Chạy lệnh sau để bật bộ đệm 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 bật bộ nhớ cache thông tin xác thực, bộ nhớ cache sẽ được lưu vào bộ nhớ cache cho 7200 giây (2 giờ).


173
2018-02-17 13:30



Cảm ơn ........ - Sak


Tôi chỉ gặp vấn đề tương tự và giải pháp đơn giản nhất tôi tìm thấy là sử dụng URL SSH thay vì HTTPS:

ssh://git@github.com/username/repo.git

Và không phải thế này:

https://github.com/username/repo.git

Bây giờ bạn có thể xác thực với chỉ các SSH Key thay cho username và password.


110
2018-06-14 07:19



Cách dễ dàng nhất để khắc phục sự cố, chỉ cần chỉnh sửa URL gốc từ xa. Đó là tất cả. Làm xong. Thanx! - JOM
Điều này làm việc cho tôi nhưng trước tiên tôi cần phải giải quyết vấn đề này: stackoverflow.com/questions/2643502/… - Sridhar-Sarnobat


Ngoài việc thay đổi sang SSH, bạn cũng có thể tiếp tục sử dụng HTTPS, nếu bạn không nhớ đặt mật khẩu của mình ở dạng văn bản rõ ràng. Đặt cái này vào ~/.netrc và nó sẽ không yêu cầu tên người dùng / mật khẩu của bạn (ít nhất là trên Linux và Mac):

machine github.com
       login <user>
       password <password>

Thêm vào (xem bình luận thứ 2 của VonC): trên Windows tên tập tin là %HOME%\_netrc.

Cũng đọc nhận xét đầu tiên của VonC trong trường hợp bạn muốn mã hóa.

Một bổ sung khác (xem bình luận của user137717) mà bạn có thể sử dụng nếu bạn có git 1.7.10 hoặc mới hơn.

Lưu trữ mật khẩu github của bạn trong git bằng cách sử dụng trình trợ giúp thông tin xác thực :

Nếu bạn nhân bản kho lưu trữ GitHub bằng HTTPS, bạn có thể sử dụng   trình trợ giúp xác thực để yêu cầu Git ghi nhớ tên người dùng GitHub của bạn và   mật khẩu mỗi khi nó nói chuyện với GitHub.

Điều này cũng hoạt động trên Linux, Mac và Windows.


105
2018-01-19 19:08



Vâng, nó hoạt động trên Linux, nhưng không hoạt động trên gitbash trên Windows. - Dielson Sales
Từ quan điểm bảo mật, đó là một ý tưởng rất tồi tệ. - dolmen
@ dolmen Tôi hiểu ý của bạn là gì, nhưng nếu bạn để ý mật khẩu của mình trong một văn bản rõ ràng, bạn có thể ... mã hóa nó;) Xem stackoverflow.com/a/18362082/6309. và điều đó thậm chí còn tương thích với xác thực 2 yếu tố (2FA) của Github: stackoverflow.com/a/18607931/6309 - VonC
@Sales nó hoạt động hoàn hảo từ phiên DOS hoặc git bash trên Windows, miễn là bạn gọi tệp của mình %HOME%\_netrc (thay vì ~/.netrc). Xem thêm stackoverflow.com/a/18362082/6309 để mã hóa tập tin đó. - VonC
bạn không cần phải đặt nó trong văn bản rõ ràng hoặc mã hóa nó. tiện ích trợ giúp sẽ lưu trữ nó cho bạn và mất 30 giây để thiết lập. help.github.com/articles/caching-your-github-password-in-git/… - user137717


Đối với những người chưa được bắt đầu nhầm lẫn với các câu trả lời trước, bạn có thể làm:

git remote -v

sẽ trả lời một cái gì đó như

origin  https://yourname@github.com/yourname/yourrepo.git (fetch)
origin  https://yourname@github.com/yourname/yourrepo.git (push)

sau đó bạn có thể chạy lệnh mà nhiều người khác đã đề xuất, nhưng bây giờ bạn biết tên của bạn và yourrepo từ trên cao, vì vậy bạn chỉ có thể cắt và dán yourname/yourrepo.git từ trên xuống

git remote set-url origin git@github.com:yourname/yourrepo.git

69
2018-02-13 17:22



Tôi đã thử điều này. Nó hỏi tôi vì paraphrase mỗi lần. Tôi đã không thiết lập một - samayo
Điều gì xảy ra yourrepo? - Raphi
@Raphi chạy git remote -v và xem những gì xuất hiện - Davide
Các câu trả lời khác nên thêm vào lời khuyên này. - Bennett Brown


Nếu bạn đang sử dụng ssh và khóa cá nhân của bạn được mã hóa bằng cụm mật khẩu, thì bạn vẫn sẽ được nhắc nhập mật khẩu / mật khẩu cho khóa riêng khi bạn thực hiện các thao tác mạng với Git như push, pullfetch.

Sử dụng ssh-agent để lưu mật khẩu khóa / mật khẩu khóa riêng

Nếu bạn muốn tránh phải nhập cụm mật khẩu của mình mỗi lần, bạn có thể sử dụng ssh-agent để lưu trữ thông tin đăng nhập mật khẩu khóa riêng của bạn một lần cho mỗi phiên thiết bị đầu cuối, như tôi giải thích câu trả lời của tôi cho Không thể mở kết nối với tác nhân xác thực của bạn:

$ eval `ssh-agent -s`
$ ssh-add

Trong Windows msysgit Bash, bạn cần đánh giá đầu ra của ssh-agent, nhưng tôi không chắc liệu bạn có cần làm như vậy trong các môi trường phát triển và hệ điều hành khác không.

ssh-add tìm kiếm khóa riêng trong nhà của bạn .ssh thư mục được gọi id_rsa, đó là tên mặc định, nhưng bạn có thể chuyển một filepath đến một khóa với một tên khác.

Giết chết tác nhân

Khi bạn đã hoàn tất phiên đầu cuối của mình, bạn có thể tắt ssh-agent với cờ tiêu diệt -k:

$ ssh-agent -k

Như đã giải thích trong ssh-agent thủ công:

-k

Giết tác nhân hiện tại (được đưa ra bởi biến môi trường SSH_AGENT_PID).

Thời gian chờ tùy chọn

Ngoài ra, nó có thể mất một tham số thời gian chờ tùy chọn như vậy:

$ ssh-add -t <timeout>

Ở đâu <timeout> có định dạng <n>h cho <n> giờ, <n>m cho <n> phút, v.v.

Theo ssh-agent thủ công:

-t life

Đặt giá trị mặc định cho tuổi thọ tối đa của danh tính được thêm   cho đại lý. Tuổi thọ có thể được xác định bằng giây hoặc trong   định dạng thời gian được chỉ định trong sshd_config (5). Đã chỉ định tuổi thọ   cho một danh tính với ssh-add (1) ghi đè giá trị này. Không có   tùy chọn này là thời lượng tối đa mặc định là mãi mãi.

Xem trang này để biết thêm các định dạng thời gian.

Cảnh báo bảo mật cho người dùng Cygwin

Người dùng Cygwin nên biết nguy cơ bảo mật tiềm năng với việc sử dụng ssh-agent trong Cygwin:

mọi người nên nhận thức được   nguy cơ tiềm tàng của ssh-agent dưới cygwin [1], mặc dù theo một địa phương   netstat và portscan từ xa không xuất hiện cổng được chỉ định trong   / tmp / ssh-foo có thể truy cập được với bất cứ ai ...?

[1]: http://www.cygwin.com/ml/cygwin/2001-01/msg00063.html

Và tại trích dẫn liên kết:

tuy nhiên, lưu ý rằng các ổ cắm miền unix của Cygwin là CƠ BẢN   INSECURE  và vì vậy tôi mạnh mẽ GÂY CHÁN NẢN CHO sử dụng ssh-agent dưới   Cygwin.

khi bạn chạy ssh-agent dưới Cygwin, nó tạo ổ cắm AF_UNIX    /tmp/ssh-$USERNAME/  danh mục. dưới ổ cắm cy_win AF_UNIX   được mô phỏng qua ổ cắm AF_INET. bạn có thể dễ dàng thấy rằng nếu bạn nhìn   vào /tmp/ssh-$USERNAME/agent-socket-*  thông qua notepad. bạn sẽ thấy   cái gì đó như

!<socket >2080

sau đó chạy netstat -a và bất ngờ! bạn có một số chương trình nghe   cổng 2080. đó là ssh-agent. khi ssh nhận được thử thách RSA từ   máy chủ, nó đề cập đến tương ứng /tmp/ssh-$USERNAME/agent-socket-*   (theo Cygwin, trong trường hợp của chúng tôi, điều đó có nghĩa là nó sẽ mở kết nối tới    localhost:2080) và yêu cầu ssh-agent xử lý thử thách RSA với   khóa riêng tư, và sau đó nó chỉ đơn giản là trả lời nhận được từ   ssh-agent đến máy chủ.

dưới unix, kịch bản như vậy hoạt động mà không có vấn đề, bởi vì unix kernel   kiểm tra quyền khi chương trình cố truy cập ổ cắm AF_UNIX. Dành cho   Ổ cắm AF_INET, tuy nhiên, các kết nối là ẩn danh (đọc   "không an toàn"). Hãy tưởng tượng, rằng bạn có Cygwin ssh-agent đang chạy.   hacker độc hại có thể portscan hộp của bạn, xác định vị trí cổng mở được sử dụng bởi   ssh-agent, mở kết nối tới máy chủ ssh của bạn, nhận RSA thách thức   từ đó, gửi nó đến ssh-agent của bạn thông qua cổng mở mà anh ta tìm thấy, nhận RSA   phản hồi, gửi nó đến máy chủ ssh và thì đấy, anh ta đã đăng nhập thành công   đến máy chủ của bạn như bạn.


48
2017-08-21 02:54



Âm thanh đẹp và chi tiết. Tôi đã chăm sóc Trình trợ giúp xác thực httpsvà bạn đã chăm sóc các kết nối ssh! +1 - VonC


Nguồn: Thiết lập Git

Lệnh sau sẽ lưu mật khẩu của bạn vào bộ nhớ trong một thời gian.
  (Dành cho git 1.7.10 hoặc mới hơn.)

$ git config --global credential.helper cache
# Set git to use the credential memory cache

$ git config --global credential.helper 'cache --timeout=3600'
# Set the cache to timeout after 1 hour (setting is in seconds)

42
2017-09-01 02:55



Tôi thích trợ giúp thông tin 'netrc' (stackoverflow.com/a/18362082/6309) cho bộ nhớ đệm nhiều thông tin đăng nhập (mà không phải nhớ mọi mật khẩu). Nhưng nếu bạn đang sử dụng Windows và muốn sử dụng bộ nhớ cache, bạn cần winstore (stackoverflow.com/a/15310274/6309) - VonC
Đây là câu trả lời tốt nhất cho đến nay IMHO. - Chiel ten Brinke