github: Không có phương pháp xác thực nào được hỗ trợ


97

tôi sử dụng github và đã thêm và đồng bộ hóa thành công các tệp trên máy tính xách tay của mình trước đây.

kể từ gần đây, tôi bắt đầu nhận được " Lỗi nghiêm trọng PuTTY: Đã ngắt kết nối: Không có phương pháp xác thực được hỗ trợ nào " sau khi chạy:

git pull origin master (hoặc push)

Tuy nhiên

ssh git@github.com trả về câu trả lời chính xác: LỖI: Xin chào tên người dùng! Bạn đã xác thực thành công nhưng GitHub không cung cấp quyền truy cập shell Kết nối tới github.com đã đóng.

sau khi tìm hiểu trên github, tôi tìm thấy morcel này:

Không có phương pháp xác thực nào được hỗ trợ Bạn nên biết về biến môi trường GIT_SSH, được git sử dụng để tìm ứng dụng khách nói ssh của bạn, nếu ssh không hoạt động với bạn. Cài đặt git có thể đang sử dụng plink.exe (thông qua GIT_SSH) để thực hiện xác thực. Nếu vậy, hãy đảm bảo rằng bạn có pageant.exe đang chạy và khóa bạn đã tạo cho github được tải vào đó. Điều này cung cấp chìa khóa cho plink.exe; không có nó, lỗi trên sẽ xảy ra.

không chắc plink.exe hoặc peagant.exe là gì .. và thực tế là ssh git@github.com dường như xác thực chính xác khiến tôi tự hỏi giải pháp tốt nhất ở đây là gì .. tôi chắc chắn không muốn làm phức tạp quá trình thiết lập của mình nếu không. cần thiết.

Câu trả lời:


100

Bạn có thể tạo một tệp có tên ".profile" trong thư mục chính của mình, đối với tôi đó là C: \ Users \ [user]

Bên trong tệp đó, hãy đặt dòng mã sau:

GIT_SSH="/usr/bin/ssh.exe"

Điều này sẽ đặt biến môi trường GIT_SSH để sử dụng ứng dụng khách ssh đi kèm với git.

Tập lệnh .profile được thực thi khi bạn bắt đầu dòng lệnh Git Bash.

Chỉnh sửa: Đây là .profile của tôi. Nó sẽ yêu cầu bạn nhập mật khẩu lần đầu tiên khi bạn khởi động dấu nhắc lệnh git, sau đó sẽ ghi nhớ mật khẩu đó từ đó trở đi cho đến khi bạn khởi động lại máy tính của mình. Rất tiện dụng để bạn không cần phải nhập mật khẩu của mình mỗi khi bạn muốn làm gì đó.

SSH_ENV="$HOME/.ssh/environment"
GIT_SSH="/usr/bin/ssh.exe"

function start_agent {
echo "Initializing new 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;
}

# Source SSH settings, if applicable
if [ -f "${SSH_ENV}" ]; then
. "${SSH_ENV}" > /dev/null
#ps ${SSH_AGENT_PID} doesn't work under cygwin
ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
start_agent;
}
else
start_agent;
fi

8
+1 Tôi không gặp vấn đề gì ngoài sự cố khi sử dụng Putty / Pageant cho nhu cầu ssh của git. Sử dụng ứng dụng khách ssh được tích hợp sẵn sẽ mang lại hiệu quả tuyệt vời. Điều này giải thích tại sao ssh git@github.com trả về tốt nếu bạn tự thực thi nó, nhưng để git sử dụng các công cụ đã định cấu hình (Putty / Pageant) thì không.
enriquein

14
Đối với tôi đó chỉ là GIT_SSH = "/ bin / ssh.exe" (trên Windows). Cảm ơn!
Martin Konicek

1
@Justin bạn có đang sử dụng lời nhắc mingw32 không?
Rex Morgan

2
Sử dụng Cygwin trong Windows 7, câu trả lời ở trên làm việc nhưng tôi cần đến GIT_SSHđể .bash_profilevà không.profile
Gabe

2
Trong trường hợp của tôi với Windows 10 sử dụng Git Bash thì đó làGIT_SSH="D:\Program Files\Git\usr\bin\ssh.exe"
PaulH

31

Sử dụng TortoiseGit

TortoiseGit> Cài đặt ... Mạng ... Máy khách SSH: C:\Program Files\Git\usr\bin\ssh.exe

Vị trí của tôi khác nhau. Trên một máy tính, nó đã ở trongC:\Program Files (x86)\Git\bin\ssh.exe

con rùa


5
cảm ơn. điều này đã hoạt động. lưu ý: bạn có thể phải tìm kiếm chính xác vị trí của 'ssh.exe' trên một máy nhất định. đối với tôi đó là C: \ Program Files \ Git \ usr \ bin \ ssh.exe (có thể là trên một máy lỗi thời)
pestophagous

10

"... không chắc plink.exe hoặc peagant.exe là gì ..."

Vì bạn hỏi: plink & pageant là một phần của bộ PuTTY, là một triển khai của SSH hỗ trợ Linux & Windows và hoàn toàn chiếm ưu thế trên Windows.

SSH

Secure Shell (SSH) là một giao thức mạng mật mã để bảo mật thông tin liên lạc dữ liệu. Nó thiết lập một kênh bảo mật qua mạng không an toàn trong kiến ​​trúc máy khách-máy chủ, kết nối ứng dụng máy khách SSH với máy chủ SSH. Các ứng dụng phổ biến bao gồm đăng nhập bằng dòng lệnh từ xa, thực thi lệnh từ xa, nhưng bất kỳ dịch vụ mạng nào cũng có thể được bảo mật bằng SSH.

nếu bạn đã từng sử dụng Telnet, nó giống như vậy (nhưng an toàn hơn): nó cho phép bạn truy cập từ xa bash shell (dòng lệnh) của máy chủ Linux.

PuTTY

PuTTY là ứng dụng giả lập thiết bị đầu cuối, bảng điều khiển nối tiếp và ứng dụng truyền tệp mạng miễn phí và mã nguồn mở. Nó hỗ trợ một số giao thức mạng, bao gồm SCP, SSH, Telnet, rlogin ...

Trên Windows, nó là phần mềm thống trị để truy cập từ xa dòng lệnh của máy chủ Linux theo giao thức SSH (ở trên). Trong Windows, phần mở rộng .exe dành cho tệp thực thi. Vì vậy, những lưu ý về plink.exe & pageant.exe có thể không áp dụng nếu bạn đang sử dụng Linux . PuTTY bao gồm

Plink : một giao diện dòng lệnh với PuTTY trở lại kết thúc

Pageant : một đại lý xác thực SSH cho PuTTY, PSCP và Plink

Từ ( http://en.wikipedia.org/wiki/Secure_Shell#Key_management )

Khi khóa công khai hiện diện ở đầu từ xa và khóa cá nhân phù hợp có ở đầu cục bộ, bạn không cần nhập mật khẩu nữa ... để bảo mật bổ sung, bản thân khóa riêng có thể được khóa bằng cụm mật khẩu.

Vì vậy, github được lưu trữ trên máy Linux và sử dụng SSH để bảo mật kết nối. SSH hoặc xác thực bằng mật khẩu hoặc khóa, nhiều máy chủ (github?) Chỉ xác thực bằng khóa. Bạn có thể thiết lập đang cố gắng xác thực bằng một khóa. Khóa và máy chủ không phải là một cho một: bạn có thể có hai khóa cho cùng một máy chủ và / hoặc hai máy chủ cho cùng một khóa, vì vậy chúng cần được quản lý. Nếu bạn đang sử dụng Windows, thì phiên SSH của bạn có thể được truy cập thông qua plink và các khóa của bạn có thể do Pageant quản lý.

Nhập khóa bạn cần mỗi khi tải Pageant. Nếu bạn đã làm theo hướng dẫn cho biết "nhập khóa của bạn" và thấy rằng nó hoạt động, nhưng nó không hoạt động bây giờ, hãy xem Chương 9: Sử dụng Pageant để xác thực .

Một mẹo cuối cùng nếu bạn đang sử dụng Windows: bạn có thể có nhiều phiên bản của bộ PuTTY được cài đặt bởi các công cụ khác nhau. Ví dụ, TortoiseGit tự cài đặt.


8

Tôi gặp sự cố này vì tôi GIT_SSHđã trỏ đến phiên bản TortoiseSVN của Plink.exe. Tôi đã thay đổi nó để trỏ đến phiên bản TortoiseGit, khởi động lại cmd và nó hoạt động.

Tôi không thể nhớ chính xác, nhưng phiên bản TortoiseSVN có thể là phiên bản 32 bit và phiên bản TortoiseGit là 64 bit (nằm trong Program Files, không phải Program Files (x86)).

Kiểm tra lại GIT_SSHenv var của bạn .

Tôi thích sử dụng git với normal cmd.exe(tất nhiên là trong Console2)


Bạn nhớ không lầm; Tôi gặp vấn đề tương tự, với GIT_SSH trỏ đến phiên bản TortoiseSVN 32-bit của TortoisePlink.exe. Chuyển nó sang phiên bản của TortoiseGit đã hoạt động.
nitwit

6

Đối với người dùng TortoiseGit trên Windows

Ban đầu, tôi đã từng thiết lập hầu hết các kho lưu trữ Github / Bitbucket của mình bằng cách sử dụng các URL của kho lưu trữ SSH như (ban đầu), đây từng là cách thuận tiện duy nhất để ngăn TortoiseGit nhắc nhập mật khẩu của bạn trong mỗi hành động.

Nhưng việc thiết lập TortoiseGit theo cách này luôn khiến bạn khó chịu. Mỗi lần tôi phải mất hàng giờ để thiết lập chính xác, vì các tùy chọn cài đặt mặc định dường như không bao giờ hoạt động (ngay cả từ năm 2016, sheesh!).

Nhưng TortoiseGit hiện đã quản lý mật khẩu tốt hơn cho HTTPS và Github thực sự khuyên bạn nên sử dụng URL HTTPS bất cứ khi nào có thể.

URL SSH: git@github.com:User/repo-name.git

URL HTTPS: https://github.com/User/repo-name.git

Các lợi ích của HTTPS là:

  • Không quản lý hoặc tạo khóa SSH
  • Không cần phải pageant.exechạy liên tục (yêu cầu mật khẩu của bạn mỗi lần khởi chạy)
  • Sử dụng TortoiseGit từ Úc, tôi thấy rằng bản sao qua HTTPS nhanh hơn SSH từ 5-10 lần

+ 'git config --global http.sslVerify false'
Mike

5

Nếu bạn đang sử dụng Pageant và gặp lỗi được mô tả trong câu hỏi sau khi khởi động lại PC của bạn (hoặc đóng và mở lại Pageant):

Lỗi có thể do Pageant không chủ động tải khóa GitHub SSH của bạn. Theo mặc định, Pageant KHÔNG tự động tải các khóa từ phiên trước khi nó khởi động.

Để nạp khóa:

  1. Mở cuộc thi. (Trên Windows, nếu Pageant đang chạy, nó sẽ có một biểu tượng trên khay hệ thống. Nhấp đúp vào đó.)
  2. Nhấp vào nút Thêm khóa và tiến hành thêm khóa SSH GitHub hiện có của bạn.

Để tránh sự cố này trong tương lai, bạn có thể định cấu hình Pageant để tự động tải khóa của bạn khi nó khởi động. (Pageant sẽ tự động nhắc bạn nhập mật khẩu nếu khóa của bạn được bảo vệ bằng mật khẩu.)

Các bước để thực hiện việc này (giả sử bạn đã cấu hình Pageant để chạy khi Windows khởi động):

  1. Tìm lối tắt được Windows sử dụng để chạy Pageant khi Windows khởi động. (Nó có thể nằm trong thư mục Startup, có thể được mở bằng Start> Run> shell:startup)
  2. Trong hộp thoại Thuộc tính của lối tắt, thêm đường dẫn đầy đủ và tên tệp của tệp khóa SSH vào trường "Mục tiêu".

Tham khảo và chi tiết đầy đủ: http://blog.shvetsov.com/2010/03/making-pageant-automatically-load-keys.html


4

Vấn đề của tôi là tôi đã cố gắng sử dụng tên người dùng github của mình. Rõ ràng khi sử dụng Github (hoặc là một thứ Git?) , Nếu bạn sử dụng xác thực dựa trên khóa, bạn cần đặt tên người dùng của mình thành git.

Tôi không chắc tại sao bạn thậm chí cần một tên người dùng - có lẽ ai đó hiểu biết hơn có thể giải thích điều đó?


Khi sao chép một kho lưu trữ riêng tư, nó sẽ là một URL chẳng hạn như git@github.com: username / Repository.git. Tôi không hoàn toàn chắc chắn về khoa học đằng sau nó nhưng có vẻ như git là tên người dùng chung cho mọi tài khoản Github
Winter

1
PLink / Pageant hoạt động tốt. Đây là vấn đề thực tế, và sử dụng một cái gì đó giống như ssh://git@github.com/myname/repo.gitsẽ hoạt động tốt. Công việc tốt đẹp. Đối với lý do tại sao, tôi cho rằng đó là để khóa an ninh. Người dùng 'git' đã bị vô hiệu hóa đăng nhập, vì vậy không ai có thể xâm nhập vào hệ thống theo cách đó. Họ cần phải có một chìa khóa hợp lệ để nói chuyện thậm chí đến Github, và một khi họ có một chìa khóa hợp lệ, họ có thể phù hợp với nó chống lại người sử dụng để đăng nhập họ.
ChokesMcGee

2

Trên máy Windows 7 của tôi đang chạy Github dành cho Windows bằng git phiên bản 1.8.3.msysgit.0. Tôi nhận thấy rằng việc cập nhật biến môi trường hệ thống GIT_SSH thành C: \ Program Files (x86) \ Git \ bin \ ssh.exe dường như thực hiện được một mẹo nhỏ. Điều này cũng đã khắc phục sự cố của tôi khi liên hệ với kho git của OpenShift.


2

Đã làm việc cho tôi trên Windows 8: Biến GIT_SSH trỏ đến plink.exe, Đã thay đổi nó trong cài đặt hệ thống để trỏ đến tệp nhị phân ssh và điều đó đã khắc phục được sự cố. Để tìm ra đường dẫn đầy đủ đến ssh, hãy chạy:

where ssh

2

Để giải quyết vấn đề này, đây là những gì tôi đã làm.

Tôi đang sử dụng Git Bash trên Windows 10

Tôi bắt đầu Pageant, nhấn Thêm phím,

nhập mô tả hình ảnh ở đây

được điều hướng đến thư mục C: \ Users \ username \ .ssh và chọn khóa của tôi

nhập mô tả hình ảnh ở đây

Sau đó, tôi cố gắng thực hiện git push và lần này nó đã hoạt động.


Hãy nhớ rằng, bạn có thể sẽ phải làm điều này mỗi khi khởi động lại PC Windows của mình - bạn có thể đặt Pageant vào thư mục khởi động của mình dưới dạng lối tắt với đối số dòng lệnh chính xác cho tệp khóa cá nhân của mình, nhưng nếu bạn đã đặt mật khẩu trên khóa riêng tư khi tạo, bạn cần nhớ nhấp chuột phải vào biểu tượng Pageant trong khay công cụ, chọn "Thêm khóa" và điền vào sau mỗi lần khởi động lại.
webbje


1

Tôi gặp phải vấn đề tương tự này, tuy nhiên giải pháp GIT_SSH dường như hoạt động một lần cho tôi. Sau khi khởi động lại máy tính, tôi nhận ra đó là một thứ khác, vì tôi có thể sao chép các kho lưu trữ riêng tư của mình mà không gặp vấn đề gì bằng cách sử dụng Git Bash hoặc Command Prompt, nhưng không phải trong Sublime Text 3 với plugin SublimeGit. Giải pháp của tôi rất đơn giản và thực sự là những gì @BlueRaja - Danny Pflughoeft đã đề cập nhưng tôi nghĩ nó có thể sử dụng một số hướng;)

Về cơ bản bạn chỉ cần chỉnh sửa ~/.ssh/configvà đảm bảo tên người dùng là được git. Bạn cũng có thể yêu cầu nó sử dụng khóa SSH cụ thể cho Github - ~/.ssh/configTệp của tôi trông giống như sau:

Host gh
    Hostname github.com
    User git
    IdentityFile ~/.ssh/github_rsa.pub

Tôi có một khóa cụ thể cho Github do số lượng việc khác tôi làm trong suốt cả ngày của mình, nhưng nếu bạn chỉ có một khóa thì nó thường ~/.ssh/id_rsa.pubgiống như Github giải thích ở đây .

Tôi biết mọi người có một giải pháp khác nhau, nhưng tôi sẽ để điều này ở đây cho bất kỳ ai có thể gặp phải bài viết này mà không có bản sửa lỗi. Chúc may mắn!


1

Tôi gặp lỗi này khi sử dụng TortoiseGit để sao chép kho lưu trữ từ GitHub. Đã sửa lỗi bằng cách nhấp vào "Load Putty Key" và chọn một tệp khóa (* .pkk) trong hộp thoại nhân bản Git.



0

Tôi đã gặp sự cố này (ssh trực tiếp hoạt động, nhưng git pull không thành công) do điều khiển từ xa git của tôi không giống như tôi nghĩ.

Vâng, vâng, tôi biết đó là một sai lầm ngu ngốc, nhưng nó xảy ra và nó đáng để kiểm tra.

Sử dụng git remote -v


0

Tôi gặp sự cố tương tự sau khi cập nhật GitExtensions lên phiên bản 3.3.0.7719

Bằng cách nào đó, nó đã hoàn nguyên cài đặt xác thực của tôi để sử dụng PuTTY thay vì OpenSSH.

Trong phiên bản đó, đây là menu tôi đã sử dụng để kích hoạt lại OpenSSH:

nhập mô tả hình ảnh ở đây

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.