Gitを使用する場合のアクセス拒否(公開鍵)エラーの解決方法


632

Mac Snow Leopardを使用していて、インストールしたところgitです。

試しました

git clone git@thechaw.com:cakebook.git

しかし、それは私にこのエラーを与えます:

Initialized empty Git repository in `/Users/username/Documents/cakebook/.git/`
Permission denied (publickey).
fatal: The remote end hung up unexpectedly

何が欠けていますか?
私もssh-keygenパスフェーズなしで試してみましたが、それでも同じエラーが発生します。


8
ssh-keygenで生成した公開鍵をアップロードしようとしましたか?
Patrick Cornelissen

私の問題は、クローンを作成したことですsudo-これは別の公開鍵を持つ別のユーザーです。
Vitaly Zdanevich 2015年

同じエラー。以前にgithubを介して公開鍵を作成してから、ssh-keygenユーティリティを使用して別の鍵ペアを生成しました。githubの個人設定で古い公開鍵を削除し、sshで生成されたid_rsa.pub鍵をSSHおよびGPG鍵に追加すると、複製許可の問題が修正されました。
タナードルビー

回答:


775

ユーザーが以前に設定したssh公開/秘密鍵ペアを生成したことがない場合

この情報はtheChawで動作していますが、SSH公開鍵認証をサポートする他のすべてのgitリポジトリに適用できます。(たとえばgitolite、gitlabまたはgithubを参照してください。)

まず、独自の公開/秘密鍵ペアセットを設定します。これはDSAまたはRSAのいずれかを使用できるので、基本的に、設定したすべてのキーが機能します。ほとんどのシステムでは、ssh-keygenを使用できます。

  • まず、.sshディレクトリにcdします。ターミナルを開いて実行します:

    cd ~/.ssh && ssh-keygen

  • 次に、これをクリップボードにコピーする必要があります。
    • OS Xで実行: cat id_rsa.pub | pbcopy
    • Linuxの場合: cat id_rsa.pub | xclip
    • Windows(Cygwin / Git Bash経由)で実行: cat id_rsa.pub | clip
  • ウェブサイトからアカウントにキーを追加します。
  • 最後に.gitconfigを設定します。
    • git config --global user.name "bob"
    • git config --global user.email bob@... (設定が確実にリロードされるようにコマンドラインを再起動することを忘れないでください)

これで、クローンを作成してチェックアウトすることができます。

詳細については、https: //help.github.com/articles/generating-ssh-keys をご覧ください(@Lee Whitneyに感謝)-

ユーザーが以前に設定したssh公開/秘密鍵ペアを生成した場合

  • githubまたはgitlabアカウント設定で認証されているキーを確認してください
  • ローカルコンピューターから関連付ける必要がある対応する秘密キーを決定する

eval $(ssh-agent -s)

  • キーの場所を定義する

ssh-add ~/.ssh/id_rsa


6
OK。これは実際にはgitではなくssh同期の問題です。Assemblaでも同じことができました。あなたのリンクで解決できました。よろしくお願いします!
Alexandre Bourlier 2012年

この回答は役に立ちますが、ゼロからキーを生成する場合、これはより完全で簡単に見えます。help.github.com
articles

6
keygenで問題が発生しました。これは、グローバル環境変数の電子メールアドレスの影響を受けます。この問題が発生している場合は、最初のステップでgithubアカウントのメールアドレスを指定する必要があります:ssh-keygen -t rsa -C "your_email@youremail.com"
melchoir55

30
それでも機能しない場合は、を実行する必要がありますssh-add ~/.ssh/id_rsa
Michael Litvin 2017年

1
使用してコピーするxclipだけで次のようにして働いていたLinux上でxclip -sel clip < ~/.ssh/id_rsa.pubここに記載されている:help.github.com/articles/generating-ssh-keys
パットMigliaccio

217

より広範囲なトラブルシューティングと自動修正でさえ、次のように実行できます。

ssh -vT git@github.com

出典:https : //help.github.com/articles/error-permission-denied-publickey/


1
私の問題は、サーバー用の別のキーを持つことに関係していました。上記のコマンドを使用して問題を特定したら、構成ファイル内のIdentifyFileを修正しました。
Jarie Bolander

1
認証にgithubが使用しようとしていたキーを示しました。v役に立つ
cdosborn 2015年

9
これは何も修正しません。それでもOPの質問でエラーが発生します。
IgorGanapolsky

5
このコマンドは、問題のトラブルシューティングを支援するためのものです。これは、魔法のような「このための」スイッチではありません。
stevek 2017

2
これは何も解決したとは言えませんが、興味深いコマンドの地獄であり、GitHub Enterpriseでも動作します。
Hack-R、

164

このエラーは、Git読み取り専用URLではなくSSH URL(読み取り/書き込み)にアクセスしているが、そのリポジトリへの書き込みアクセス権がない場合に発生する可能性があります。

場合によっては、サーバーにデプロイするなど、独自のリポジトリを複製したいこともあります。この場合、実際に必要なのは読み取り専用アクセスのみです。しかし、それはあなた自身のリポジトリなので、GitHubはそれがあなたの好みならSSH URLを表示するかもしれません。この状況で、リモートホストの公開鍵がGitHub SSH鍵にない場合、アクセスは拒否されますが、これは発生すると予想されます。

同等のケースは、SSH URLでの書き込みアクセス権がない他の誰かのリポジトリを複製しようとした場合です。

つまり、複製のみを目的とするリポジトリの場合https://github.com/{user_name}/{project_name}.gitは、SSH URL(git@github.com:{user_name}/{project_name}.git)ではなくHTTPS URL()を使用します。これにより、(不要な)公開鍵の検証が回避されます。


更新:GitHubは現在デフォルトのプロトコルとしてHTTPSを表示しており、この移動によりSSH URLの誤用の可能性を減らすことができます。


https://github.comgitのURL、それはまだ言いますSSL certificate problem: self signed certificate in certificate chaingit -c http.sslVerify=false clone ...危険な動きのようです。ただし、Chromeはssl警告を出しません。考え?
Jason Kleban 2014年

1
@ uosɐſ申し訳ありませんが、この問題に遭遇したことはありません。たぶん最初に行うことは、別のマシンから同じコマンドを試し、問題が続くかどうかを確認することです。
kavinyao 2014年

1
これも私のために行いました。ありがとう。gitリポジトリを共有ホスティングアカウント(1と1)に複製するにgit clone https://github.com/MyUserName/MyRepo.git は、Githubページの右側にあるリポジトリURLの下のテキストリンクをクリックする だけで、「HTTPS、SSH、またはSubversionで複製できます。 ……」(デフォルトのSSHの代わりにHTTPSをクリックしてリンクを取得します。)
Oliver Schafeld、2015

ありがとうございました!!!!!!
Sharl Sherif

すばらしい答えです。最後に誰かがなぜそれがそのように機能するかを説明します。
Qback

104

githubヘルプリンクは、この問題を解決するのに役立ちました。sshキーがssh-agentに追加されなかったようです。これは私がやったことです。

コマンド1:

ssh-agentが有効になっていることを確認します。このコマンドは、バックグラウンドでssh-agentを開始します。

eval "$(ssh-agent -s)"

コマンド2:

SSH鍵をssh-agentに追加します。

ssh-add ~/.ssh/id_rsa

7
OSx El CapitanからSierraにアップグレードした後、これは私のために働いた。
Louwki 2016

7
macOS Sierraへのアップグレード後に私のために働く=)
Adriano Resende

これはRaspberry Piで私にとってうまくいきました。ssh-addには、「-K」ではなく「-k」フラグがあるようです。しかし、展開キーを追加すると、SSHリンクを使用してリポジトリを正常に複製できました。
Josh

34

同じエラー報告を得た。

代わりにHTTPを使用して修正されました。テストPCに「SSHキー」を設定したくないので。

複製時にURLをHTTPに変更します。

git clone https://github.com/USERNAME/REPOSITORY.git

私の問題は少し異なります:次のコマンドを使用して、既存のローカルリポジトリをリモートに追加するときにURLを設定します。

git remote add origin ssh://github.com/USERNAME/REPOSITORY.git

これを修正するには、URLをHTTPにリセットします。

git remote set-url origin https://github.com/USERNAME/REPOSITORY.git

ところで、次のコマンドを使用してURLを確認できます。

git remote -v
origin  https://github.com/USERNAME/REPOSITORY.git (fetch)
origin  https://github.com/USERNAME/REPOSITORY.git (push)

これが私のような人に役立つことを願っています。:D



21

(少なくとも一部のプロジェクトでは)sshキーを持つgithubアカウントが必要であることに注意してください。

認証エージェントにリストされているキーを確認します(ssh-add -l
(何も表示されない場合は、ssh-add / path / to / your / keyを使用して既存のキーの1つを追加します(例:ssh-add〜 /.ssh/id_rsa))
(キーがない場合は、最初にキーを作成します。http//rcsg-gsir.imsb-dsgi.nrc-cnrc.gc.ca/documents/internet/node31.htmlを参照してください。または単にgoogle ssh-keygen)

githubアカウントに関連付けられたキーがあることを確認するには

移動:https : //github.com/settings/ssh

1 分前にssh-add -lと入力したときに表示されたハッシュの1つに一致するハッシュキーを持つキーが少なくとも1つ表示されます

そうでない場合は、1つ追加して、再試行してください。


これでうまくいきました。私のキーが認証エージェントに追加されなかったので、それは私に起こりました。ありがとう。
antonD

19

私がやったのと同じ問題で苦労していて、レポを複製することができました。iMacについては、以下の手順に従いまし

最初のステップ:SSH公開鍵がすでにあるかどうかを確認します。

  1. ターミナルを開きます。
  2. ls -al ~/.ssh既存のSSHキーが存在するかどうかを確認するために入力します。

ディレクトリリストを確認して、SSH公開鍵がすでにあるかどうかを確認します。デフォルトの公開は、次のいずれかですd_dsa.pub、id_ecdsa.pub、id_ed25519.pub、id_rsa.pub

見つからない場合は手順2に進み、見つからない場合は手順3に進みます。

ステップ2:公開SSHキーを生成する

  1. ターミナルを開きます。
  2. githubに使用する有効なメールアドレスでfollowongコマンドを入力します ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
  3. ターミナルで次のように表示されますGenerating public/private rsa key pair"Enter a file in which to save the key,"Enterキーを押すように求められたら。これは、デフォルトのファイルの場所を受け入れます。プロンプトが表示されたら、Enter a file in which to save the key (/Users/you/.ssh/id_rsa): [Press enter]もう一度Enter キーを押します。プロンプトで、安全なパスフレーズを入力します。
  4. Enter passphrase (empty for no passphrase): [Type a passphrase]Enter same passphrase again: [Type passphrase again]もう一度Enter キーを押したくない場合はEnterキーを押します

これは生成されます id_rsa.pub

ステップ3:SSHキーをssh-agentに追加する

  1. インターミナルタイプ eval "$(ssh-agent -s)"
  2. SSHキーをssh-agentに追加します。新しいSSHキーを生成するのではなく、既存のSSHキーを使用している場合は、コマンドのid_rsaを既存の秘密キーファイルの名前に置き換える必要があります。このコマンドを入力してください$ ssh-add -K ~/.ssh/id_rsa

SSHキーをコピーして、githubアカウントに追加します

  1. ターミナルでsshファイル名を指定してこのコマンドを入力しますpbcopy < ~/.ssh/id_rsa.pubこれによりファイルがクリップボードにコピーされますgithubアカウントを開きます設定> SSHおよびGPGキー>新しいSSHキーに移動タイトルを入力してクリップボードからキーを貼り付けて保存します。出来上がりです。

2
Windowsユーザーコピー:cat〜/ .ssh / id_rsa.pub | クリップ
Fabii

1
最後に、あちこちを1時間読んだ後、ステップバイステップの解決策....うまくいきます。手順のパスフレーズとしてgithubパスワードを追加することを忘れないでください。そうしないと、毎回手動で追加する必要があります
Afshin Ghazi

13

少し異なる状況がありました。リモートサーバーにログオンしていて、サーバーでgitを使用していました。gitコマンドを実行すると、同じメッセージが表示されました。

   Permission denied (publickey).
   fatal: The remote end hung up unexpectedly

私がそれを修正した方法は、私のMacで/ etc / ssh_configファイルを変更することでした。から

ForwardAgent no 

ForwardAgent yes

VirtualBox VMからGitHubからGemをフェッチしようとしたときにエラーが発生していました。を使用するようconfig.ssh.forward_agent = trueにVagrantfileを更新し、VMを再起動すると、動作します。
Chris Bloom

1
このによるセキュリティの面で最良の選択ではないかもしれません: heipei.github.io/2015/02/26/...
お父さん

13

SSHHTTPSの違いは

https://github.com/USERNAME/REPOSITORY.git

ssh://github.com/USERNAME/REPOSITORY.git

だから私はHTTPSからSSHに変更https://しましたssh://、URLの最後の何もないことで、に変更しました。

しかし、真実は次のとおりです。

https://github.com/USERNAME/REPOSITORY.git

git@github.com:USERNAME/REPOSITORY.git

私が変更された手段ssh://github.com/USERNAME/REPOSITORY.gitgit@github.com:USERNAME/REPOSITORY.gitそれが機能た。

愚かなエラーですが、希望は誰かを助けます!


はい、変更ssh://github.com/USERNAME/REPOSITORY.gitしましgit@github.com:USERNAME/REPOSITORY.gitた。
William Hu

承知しました。httpsに言及する意味がわからないと言っているだけです;)
OneCricketeer 2016

ssh代わりに使用しているhttpsので、「https://」を「ssh://」に変更しただけでエラーが発生しました。したがって、「ssh://git/../」を「git @ .. /」に変更します:)私の回答を編集しました
William Hu

わたしにはできる。どうもありがとうございました!私はhttpsを試してからsshを試しましたが、「git clone git@github.com:/myusername/myproject.git」を使用するまでは、アクセスを拒否し続けます。
タックヴァン

6

Windowsでは、すべてのアプリがHOMEに同意していることを確認してください。Msysは意外にもそれをしません。sshとgitが.sshディレクトリの場所について合意できなかったため、環境変数を設定する必要がありました。


6

あなたは企業環境にいますか?システム変数が最近変更された可能性はありますか?この SOの回答によれば、sshキーはにあり%HOMEDRIVE%%HOMEPATH%\.ssh\id_rsa.pubます。そのため、%HOMEDRIVE%最近変更された場合、gitはキーを探す場所がわからないため、すべての認証情報を知ることができません。

実行してみてくださいssh -vT git@github.com。の場所に注意してくださいidentity file。私にとっては、それは私の正常を指していなかっ\Users\MyLoginは、ネットワークレベルでプッシュされた環境変数への変更のため、それはではなくネットワークドライブを。

ソリューション?新しい%HOMEDRIVE%ファイルにはローカルファイルと同じアクセス許可があるため、.sshフォルダーをそこに移動して、1日だけ呼び出しました。


この仕事は私にとって。昨日は私のsshキーが機能していましたが、今日は私のシステムの一部の設定が変更されています。もう一度shhキーを追加するだけで動作します。
Hitesh Agarwal

6

みんなこれは私のために働いた方法です:

  1. ターミナルを開いてユーザーに移動します[添付画像を参照]
  2. .sshフォルダーを開き、id_rsaやid_rsa.pubのようなファイルがないことを確認します。そうしないと、ファイルが正しく書き換えられない場合があります。
  3. git --version [gitのインストールとバージョンを確認してください]
  4. git config --global user.email "your email id"
  5. git config --global user.name "your name"
  6. git config --list [名前とメールアドレスを設定していることを確認してください]
  7. cd〜/ .ssh
  8. ssh-keygen、ファイルの保存を求め、許可します
  9. cat〜/ .ssh / id_rsa.pub [公開鍵にアクセスして鍵をgerrit設定にコピー]

:Gitでsudoコマンドを使用しないでください。sudoを使用する必要がある非常に正当な理由がある場合は、すべてのコマンドでsudoを使用していることを確認してください(その時点でrootとしてシェルを取得するには、suを使用する方がおそらく良いでしょう)。sudoを使用せずにSSHキーを生成してから、sudo git pushなどのコマンドを使用しようとすると、生成したものと同じキーは使用されません

ここに画像の説明を入力してください

ここに画像の説明を入力してください


5

基本的なGITの説明では、SSHキーに関する説明はありませんでした。上記のリンクのいくつかをたどって、さまざまなオペレーティングシステムでこれを行う方法をステップバイステップで正確に説明するgitヘルプページを見つけました(リンクによってOSが検出され、それに応じてリダイレクトされます)。

http://help.github.com/set-up-git-redirect/

GITHubに必要なすべての手順を説明し、「RSAキーを作成するときにパスフレーズを追加する理由」などの詳細な説明も提供します。他の誰かを助けるために、私はそれを投稿すると思いました...




3

複数のキーがある場合は、必要な場合があります ssh-add private-keyfile


どうもありがとう!これは確かに私の問題でした。
GoGreen

[root @ li566-238 hanjiyun]#ssh-add private-keyfile private-keyfile:No such file or directory
JY Han

3

現在の作業ディレクトリにアクセス許可700を与える必要があるため、このエラーが発生しました。

chmod -R 700 /home/ec2-user/

3

sshキーをルートフォルダーにコピーする必要がありました。Ubuntu 18.04を実行するGoogle Cloud Compute Engine

sudo cp ~/.ssh/* /root/.ssh/

2

現在のプロジェクトの設定中にこの問題が発生しましたが、上記の解決策はどれも機能しません。そのため、コマンドssh -vT git@github.comを使用して、デバッグリストで実際に何が起こっているのかを調べてみました。私の秘密鍵のファイル名がリストにないことに気づきました。そのため、秘密鍵のファイル名を「id_rsa」に変更すると、この作業が実行されます。これが役立つことを願っています。


「id_rsa」キーを他の何かに使用している場合は役に立ちません...
random_user_name

2

そのかなり簡単です。以下のコマンドを入力してください

ssh-keygen -t rsa -b 4096 -C "youremailid@yourdomain.com"

SSHキーを生成します。ファイルを開き、内容をコピーします。GitHub設定ページに移動し、SSHキーをクリックします。[新しいSSHキーを追加]をクリックし、内容をここに貼り付けます。それだけです:)あなたは問題を再び見るべきではありません。


1

同様のアクセス許可拒否(公開鍵)エラーが発生しましたmakefileを実行しようとするとた。

上記のSSHステップの代わりに、ネイティブGitHub for Macアプリケーションをインストールできます。

https://help.github.com/articles/set-up-git#platform-mac」から「Mac用のGitHubをダウンロード」をクリックします

git hubアカウントでセットアップを完了すると(git hubコマンドラインツールもインストールしましたが、この手順が必要かどうかわからないため)、メールを受け取りました-

[GitHub]アカウントに新しい公開鍵が追加されました

と私のエラーが修正されました。


1

同じエラーが発生しました。私の問題は、sudoを混ぜることでした。

git cloneコマンドの前にsudoを付けないと、クローンを作成するディレクトリを自動的に作成できませんでした。しかし、私がそれをしたとき、私のsshキーは適切に参照されていませんでした。

それを修正するために、クローンを格納したい親ディレクトリにchmodを介してアクセス許可を設定して、書き込みできるようにしました。次に、sudoプレフィックスなしでgit cloneを実行しました。その後、うまくいきました!その後、権限を元に戻しました。できました。


1

間違ったメールでsshキーを生成したため、このエラーが発生しました。sshを使用して接続できましたが、gitは使用できませんでした。解決策は、私のgithubアカウントのメインのメールアドレスを使用してキーを再生成することでした。


1

それは私のために働いた。

公開鍵はid_rsa.pub;ファイルに保存され、アカウントにアップロードする鍵です。これを実行して、このキーをクリップボードに保存できます。

pbcopy <〜/ .ssh / id_rsa.pub

  • SSHキーをクリップボードにコピーし、Webポータルに戻ります。
  • [SSHキー]フィールドに、SSHキーを貼り付けます。
  • 「名前」フィールドに、キーの名前を入力します。
  • セーブ 。

1

それは私のために働いた

ssh -i [your id_rsa path] -T github@github.com

あなたはなぜあなたの答えが彼の問題を解決するのか、むしろ感謝したいのですが。
Muhammed Refaat

1

これに対する最も簡単な解決策は、別のユーザー名でリポジトリにpushしようとしている場合です。

 git remote set-url origin https://USERNAME@github.com/USERNAME/PROJECTNAME.git

1

私の場合、この奇妙なエラーはgnome-keyring-daemon、パスワードを必要とするキーに誤って名前を付けることの症状でした。

ここで説明する手順に従い、ターミナルからパスワードを入力しました。交絡するGUIインターフェースとしても知られるこのエラーは解決されました。参照:https : //askubuntu.com/questions/3045/how-to-disable-gnome-keyring


1

私の場合、ubuntuを再インストールし、ユーザー名を以前から変更しています。この場合、生成されたsshキーも以前のものとは異なります。

現在のssh公開鍵をリポジトリにコピーするだけで問題は解決しました。キーはユーザーの/home/.ssh/id_rsa.pub


1

私のMACでこれを解決しました:

cp ~/.ssh/github_rsa ~/.ssh/id_rsa

何らかの理由で、私のgitがgithub_rsaファイル内の秘密鍵を見つけるのをやめました。これは特定のリポジトリで発生しました。つまり、他のリポジトリではgitが正常に動作し続けたということです。

バグだと思います。

この動作が実行されていることがわかりました ssh -vT git@github.com

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.