Quyền của Github bị từ chối: ssh add agent không có danh tính


148

Đây là lần đầu tiên tôi truy cập GitHub và tôi không có kinh nghiệm sử dụng bảng điều khiển. Tôi đang dùng MacBook sử dụng Bash. Khi tôi cố gắng truy cập GitHub, tôi nhận được điều này:

git clone git@github.com:dhulihan/league-of-legends-data-scraper.git
Cloning into 'league-of-legends-data-scraper'...
Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

Tôi đã thử làm theo các hướng dẫn trên trang Github về việc cho phép bị từ chối.

Khi tôi sử dụng ssh -vT git@github.com, tôi nhận được như sau:

OpenSSH_6.2p2, OSSLShim 0.9.8r 8 Dec 2011
debug1: Reading configuration data /etc/ssh_config
debug1: /etc/ssh_config line 20: Applying options for *
debug1: Connecting to github.com [192.30.252.129] port 22.
debug1: Connection established.
debug1: identity file /Users/XXXX/.ssh/id_rsa type -1
debug1: identity file /Users/XXXX/.ssh/id_rsa-cert type -1
debug1: identity file /Users/XXXX/.ssh/id_dsa type -1
debug1: identity file /Users/XXXX/.ssh/id_dsa-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.2
debug1: Remote protocol version 2.0, remote software version libssh-0.6.0
debug1: no match: libssh-0.6.0
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-sha1 none
debug1: kex: client->server aes128-ctr hmac-sha1 none
debug1: sending SSH2_MSG_KEXDH_INIT
debug1: expecting SSH2_MSG_KEXDH_REPLY
debug1: Server host key: RSA 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48
debug1: Host 'github.com' is known and matches the RSA host key.
debug1: Found key in /Users/XXXX/.ssh/known_hosts:1
debug1: ssh_rsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: Roaming not allowed by server
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Trying private key: /Users/XXXX/.ssh/id_rsa
debug1: Trying private key: /Users/XXXX/.ssh/id_dsa
debug1: No more authentication methods to try.
Permission denied (publickey).

Tiếp theo, eval "$(ssh-agent -s)"trả về "Agent pid 2314", tuy nhiên ssh-add -ltrả về "Tác nhân không có danh tính."

Và đó là nơi tôi bị mắc kẹt.


Bạn đã tạo khóa SSH chưa? Bạn có nó được liệt kê với tài khoản github của bạn? Bạn có chìa khóa trên máy mac không?
Etan Reisner

Tôi đang tìm câu trả lời cho câu hỏi đó (không quen thuộc với toàn bộ hệ thống này) và tìm thấy câu hỏi này: mac.github.com Nó đã giải quyết tất cả các vấn đề của tôi. Tôi khuyên bạn nên nó. Cảm ơn đã đẩy đúng hướng, Etan!
Tối

4
Bạn có thể muốn thêm câu trả lời cho câu hỏi này (có thêm thông tin chi tiết về cách giải quyết vấn đề của bạn) và chấp nhận câu trả lời của bạn.
Etan Reisner

Được rồi, tôi đã gửi câu trả lời. SO đang nói với tôi rằng tôi chỉ có thể chấp nhận nó trong 2 giờ.
Tối

Câu trả lời:


194

Chi tiết đầy đủ trong câu trả lời này .

Nói tóm lại, khi ssh-add -ltrở về “Các đại lý không có bản sắc”, có nghĩa là các phím được sử dụng bởi ssh(được lưu trữ trong các tập tin như ~/.ssh/id_rsa, ~/.ssh/id_dsa, vv) hoặc là mất tích, họ không được biết đến ssh-agent, đó là đại lý xác thực, hoặc là quyền của họ được đặt không chính xác (ví dụ, có thể ghi trên thế giới).

Nếu khóa của bạn bị thiếu hoặc nếu bạn chưa tạo bất kỳ khóa nào, hãy sử dụng ssh-keygen -t rsa, sau đó ssh-addthêm chúng.

Nếu các khóa tồn tại nhưng không được biết đến ssh-agent(như nếu chúng nằm trong thư mục không chuẩn), hãy sử dụng ssh-add /path/to/my-non-standard-ssh-folder/id_rsađể thêm chúng.

Xem câu trả lời này nếu bạn gặp rắc rối với ssh-addhoặc  ssh-agent.


4
Cảm ơn bạn @Doedoe vì một liên kết đến một câu trả lời hay và ngắn gọn. Và đối với những người có keyS (tức là nhiều tài khoản Git), bạn có thể phải sử dụng ssh-add /path/to/keyXcho từng tài khoản , đặc biệt nếu họ có tên không chuẩn. Chi tiết tại đây: stackoverflow.com/questions/3225862/ (một câu trả lời hay)
tuk0z

Cảm ơn vì điều đó. Tôi bị kẹt ở đây .. nhưng tôi nhận ra rằng tôi cần phải chạy ssh-add lại sau khi giải quyết phần quyền của vấn đề. Sau này, ssh -vT git@github.comkhông hoạt động. Tôi đã cần phải thêm đường dẫn tuyệt đối như các bình luận viên đã đề cập ở trên. Sau đó, tất cả là nước thịt.
jungledev

2
Trong trường hợp thứ hai, tôi đã quên cụm mật khẩu của mình và tôi đã khôi phục nó bằng cách sử dụng help.github.com/articles/how-do-i-recover-my-ssh-key-passphrase
Malder

111

thử cái này:

ssh-add ~/.ssh/id_rsa

đã làm cho tôi


5
Xin chào, chào mừng đến với SO. Vui lòng giải thích mã của bạn để người dùng của bạn có thể hiểu những gì đang diễn ra. Chúc mừng.
Cthulhu

4
Khi bạn khởi động lại, các phím của bạn không còn nữa và bạn phải thêm lại chúng.
Louwki

@Louwki Vâng ... điều đó thật khó chịu. Bạn có biết một cách xung quanh đó?
Chris Cirefice

3
@ChrisCirefice chỉ cần thực hiện ssh-add với một tham số để thêm chúng vào móc khóa của bạn vĩnh viễn. ssh-add -K ~ / .ssh / [your-private-key]
Louwki

1
Trong trường hợp của tôi, quyền truy cập tệp bị sai đối với khóa riêng. Đã sửa chmod 600 ~/.ssh/id_rsa, sau đóssh-add ~/.ssh/id_rsa
Morteza Ziyae

39

TRẢ LỜI 2019 cho macOS Sierra & High Sierra & Catalina:

PS: hầu hết các câu trả lời khác sẽ yêu cầu bạn tạo khóa ssh mới ... nhưng bạn không cần phải làm điều đó :)

Như được mô tả chi tiết trên https://openradar.appspot.com/27348363 , macOS / OS X cho đến Yosemite được sử dụng để ghi nhớ các khóa SSH được thêm bởi lệnhssh-add -K <key>

Vì vậy, đây là 4 bước tôi phải thực hiện để nó hoạt động:

1: ssh-add ~/.ssh/PATH_TO_YOUR_SSH_PRIVATE_KEY (e.g. ~/.ssh/id_rsa)

2: Thêm các mục sau vào~/.ssh/config

Host * 
  AddKeysToAgent yes
  UseKeychain yes
  IdentityFile PATH_TO_YOUR_SSH_PRIVATE_KEY (e.g. ~/.ssh/id_rsa)

3: đảm bảo xóa mọi mục nhập gitconfig sử dụng trình trợ giúp osxkeychain:

 https://github.com/gregory/dotfiles/commit/e38000527fb1a82b577f2dcf685aeefd3b78a609#diff-6cb0f77b38346e0fed47293bdc6430c6L48

4: khởi động lại thiết bị đầu cuối của bạn để nó có hiệu lực.


3
Câu trả lời tuyệt vời, tôi sẽ đề cập đến điều này bản thân mình! Rõ ràng, OS X 10.12.2 trở lên không tự động tải danh tính vào ssh-agent (mà cá nhân tôi nghĩ là một quyết định sử dụng thực sự ngu ngốc, nhưng tôi hiểu ý nghĩa bảo mật). Vì vậy, bạn cần sửa đổi cấu hình SSH để tải chúng theo cách thủ công. Tôi chỉ muốn đầu ra lỗi sẽ dẫn đến một giải pháp tốt hơn là một giờ tìm kiếm trên internet.
Chris Cirefice

12

Tôi đã bị mắc kẹt một thời gian trên cùng một vấn đề, mà cuối cùng tôi đã giải quyết.

Vấn đề của tôi : Tôi không thể thực hiện bất kỳ đẩy. Tôi có thể kiểm tra và xem điều khiển từ xa của mình (bằng cách sử dụng git remote -v), nhưng khi tôi thực hiện git push origin master, nó đã trả về: Permission denied (publickey). fatal: Could not read from remote repository.và như vậy.

Làm thế nào tôi giải quyết nó:

  • Tôi đã tạo một khóa bằng cách sử dụng ssh-keygen -t rsa. Nhập tên cho tệp chính (khi được hỏi) là vô ích.
  • Sau đó tôi có thể thêm khóa (vào git) : ssh-add /Users/federico/.ssh/id_rsa, đã trả về thành côngIdentity added: /Users/myname/.ssh/id_rsa (/Users/myname/.ssh/id_rsa)
  • Tôi đã thêm khóa SSH vào github bằng trang trợ giúp này .
  • Đã thử tất cả các lệnh trong trang trợ giúp 'Quyền từ chối khóa công khai' của Github, chỉ có ssh-add -llệnh hoạt động / có vẻ hữu ích (sau khi đã chạy các bước trước đó), nó đã trả về khóa của tôi thành công. Bước cuối cùng cho bạn biết nơi kiểm tra khóa công khai trên trang GitHub của bạn. Và lệnh này sẽ giúp bạn kiểm tra tất cả các phím của bạn : ls -al ~/.ssh.

Sau đó, lệnh đẩy cuối cùng đã làm việc!

Hy vọng điều này có thể giúp cho bạn ! Chúc may mắn cho tất cả.


7

Chạy các lệnh sau:

ssh-keygen -t rsa
ssh-add /Users/*yourUserNameHere*/.ssh/id_rsa** 
pbcopy < ~/.ssh/id_rsa.pub**

Truy cập tài khoản Github của bạn: https://github.com/sinstall/profile

1) Nhấp: Phím SSH và GPG

2) Khóa SSH mới và qua đó

3) Thêm khóa SSH

Làm xong!


Yup - nếu bạn đã thực hiện các bước khác để tạo tệp id_rsa.pub, sao chép và dán dòng pbcopy đó, sao chép khóa vào bảng tạm của bạn và làm theo hướng dẫn @zouhair - github cần biết khóa của bạn. Đặc biệt nếu bạn đang sử dụng 2FA.
davidrynn

Tôi hơi bối rối vì các tài liệu hiện tại nói rằng git tạo github_rsa / github_rsa.pub. Tôi có cả hai trong thư mục /.ssh của mình và dường như tôi không thể "xin phép". Tôi đã tạo các bản sao trong cùng thư mục bằng id_rsa nhưng không có kết quả.
Mark Löwe

6

trước hết bạn cần vào thư mục ssh của mình
cho loại lệnh này theo sau trong terminal của bạn trong mac hoặc bất cứ thứ gì bạn sử dụng trong cửa sổ

cd ~/.ssh

bây giờ nó ở trong ssh
ở đây bạn có thể tìm thấy tất cả các khóa / tệp ssh của bạn liên quan đến tất cả các dự án của bạn. Bây giờ, gõ lệnh sau để hiển thị cho bạn nếu có bất kỳ khóa ssh nào

ls

Điều này sẽ cho bạn thấy tất cả các ssh có sẵn, trong trường hợp của tôi
bây giờ đã có hai , bạn sẽ cần phải bắt đầu một tác nhân để thêm một ssh trong đó. Đối với loại lệnh sau

eval "$(ssh-agent -s)"

bây giờ cuối cùng nhưng không kém phần quan trọng, bạn sẽ thêm một ssh trong loại tác nhân này theo lệnh

ssh-add ~/.ssh/your-ssh

thay thế

thay thế ssh của bạn bằng tên tệp ssh của bạn mà bạn đã có một mẫu danh sách bước thứ hai ls command


5

Điều này có thể gây ra cho bất kỳ thiết bị đầu cuối mới, id tác nhân là khác nhau. Bạn cần thêm khóa riêng cho đại lý

$ ssh-add <path to your private key>

1

Một yếu tố bổ sung mà tôi nhận ra là thư mục .ssh thường được tạo trong thư mục gốc của bạn trong Mac OS X / Users /. Nếu bạn cố gắng sử dụng ssh -vT git@github.com từ một thư mục khác, nó sẽ báo lỗi ngay cả khi bạn đã thêm khóa chính xác.

Bạn cần thêm khóa lại (ssh-add 'đường dẫn chính xác tới id_rsa') từ thư mục hiện tại để xác thực thành công (giả sử rằng bạn đã tải khóa vào hồ sơ của mình trong Git)


1

Điều này làm việc cho tôi:
chmod 700 .ssh chmod 600 .ssh/id_rsa chmod 644 .ssh/id_rsa.pub

Sau đó, gõ này: ssh-add ~/.ssh/id_rsa


Tôi không nghĩ câu hỏi là về ~/.sshquyền. Tuy nhiên, bạn có thể cải thiện đáng kể câu trả lời của mình bằng cách thêm lệnh đầy đủ (tại đây chmod) và giải thích điều này làm gì và tại sao cần thiết.
Robert

0

Sau một thời gian dài vật lộn, cuối cùng tôi cũng đã có thể giải quyết vấn đề này trên Windows, đối với tôi, biến người dùng env GIT_SSH đã được đặt để trỏ đến

"C: \ Tệp chương trình (x86) \ WinScp \ PuTTY \ plink.exe"

được cài đặt cùng với WinScp. Tôi đã thay đổi trỏ để sử dụng ssh.exe mặc định đi kèm với git-scm "C: \ Program Files \ Git \ usr \ bin \ ssh.exe"


0

Các bước cho BitBucket:

nếu bạn không muốn tạo khóa mới, SKIP ssh-keygen

ssh-keygen -t rsa 

Sao chép khóa công khai vào clipboard:

clip < ~/.ssh/id_rsa.pub

Đăng nhập vào Bit Xô: Đi đến Xem hồ sơ -> Cài đặt -> Khóa SSH (Trong tab Bảo mật) Nhấp vào Thêm khóa, Dán khóa vào hộp, thêm tiêu đề mô tả

Quay trở lại Git Bash:

ssh-add -l

Bạn sẽ nhận được:

2048 SHA256:5zabdekjjjaalajafjLIa3Gl/k832A /c/Users/username/.ssh/id_rsa (RSA)

Bây giờ: git pullnên làm việc


0

Tôi gặp vấn đề này sau khi khôi phục ổ cứng từ bản sao lưu.

Vấn đề của tôi: Tôi có thể kiểm tra và xem điều khiển từ xa của mình (sử dụng git remote -v), nhưng khi tôi thực hiện git đẩy bản gốc, nó sẽ trả về: Quyền bị từ chối (khóa công khai). gây tử vong: Không thể đọc từ kho lưu trữ từ xa.

Tôi đã có một thư mục SSH và các khóa SSH và thêm chúng qua Terminal ( ssh-add /path/to/my-ssh-folder/id_rsa) đã thêm thành công danh tính của tôi, nhưng tôi vẫn không thể đẩy và vẫn gặp lỗi tương tự. Tạo khóa mới là một ý tưởng tồi đối với tôi, vì nó được gắn với các quyền rất an toàn khác trên AWS.

Hóa ra liên kết giữa khóa và hồ sơ Github của tôi đã bị hỏng.

Giải pháp: Thêm lại khóa vào Github trong Cấu hình> Cài đặt> Khóa SSH và GPG đã giải quyết vấn đề.

Ngoài ra: Tài khoản của tôi đã được xác thực 2 yếu tố. Khi gặp trường hợp này, nếu Terminal yêu cầu thông tin đăng nhập, hãy sử dụng tên người dùng của bạn - nhưng KHÔNG phải mật khẩu Github của bạn. Để xác thực 2 yếu tố, bạn cần sử dụng mã xác thực của mình (đối với tôi, mã này được tạo bởi Authy trên điện thoại của tôi và tôi phải sao chép nó vào Terminal cho pw).

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.