GitHubエラーメッセージ-アクセスが拒否されました(公開キー)


701

誰かがこのエラーを見て何をすべきか知っていますか?

私はターミナルを使用しています、私はルートにいます、GitHubリポジトリが存在し、今何をすべきか分かりません。

> git push -u origin master
Permission denied (publickey).
fatal: Could not read from remote repository.

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



1
.sshと認証済みキーの権限の問題である可能性があります。Sshはかなり厳格です、グーグル。
Karl Morrison、


@bdukesのような答えは、httpsを使用するコマンドで、これは機能します。Windowsの例: "PS C:\ xampp \ htdocs> git clone github.com/algolia/instant-search-demo.git "
Dung

回答:


663

GitHubはあなたを認証できません。つまり、マシンにSSHキーが設定されていないためにSSHキーが設定されていないか、キーがGitHubアカウントに関連付けられていません。

SSH / git URLの代わりにHTTPS URLを使用して、SSHキーを処理する必要がないようにすることもできます。これはGitHubが推奨する方法です。

さらに、GitHubにはそのエラーメッセージ専用のヘルプページがあり、確認できるすべての内容がより詳細に説明されています。


53
このエラーはGitHubに限定されません。BitBucketでも同じエラーが発生し、解決方法について頭を
悩ませ

32
支援部分はssh -vT git@github.comGithubヘルプページから使用して、リポジトリが使用しているキーをデバッグするのに役立ちます。回答に追加することをお勧めします。
MaximeBernard

25
SSLの代わりにHTTPSを使用することへの賛成は少しがっかりです。SSHの方がはるかに便利です。上記の@MaximeBernardからの提案で問題が解決しました。GITは.sshディレクトリの適切な場所を探していませんでした。を使用ssh -vT git@github.comすると、機能しない理由について多くの情報が提供されます。
クリストフ

1
上記の私のコメントによると、3番目のオプションは、コマンドがsshキーを持つアカウント以外のアカウントから送信されることです(たとえば、rootとして実行)。
David LeBauer 2016

1
@ theapache64が述べたように:Macを使用していてすでにsshキーを生成している場合、「ssh-add」が欠落している可能性があります。私のために働いた。
Digital Impermanence

78

〜/ .sshディレクトリに設定ファイルを作成しましたか?次のような内容である必要があります。

Host github.com 
 IdentityFile ~/.ssh/github_rsa

github_rsaという名前のsshキーを作成したと仮定します

それをGitHubにアップロードしました...

注:〜/ .ssh /ディレクトリに複数のキー(2以上)がある場合は、この明示的な設定方法に従う必要があります。この方法でキーを指定しない場合は、最初のキーが順番に取得されてgithub認証に使用されるため、キーファイル名に依存します。


1
私はssh-keyを生成しており、かなりの時間、問題なく動作することができました。ある晴れた日(おそらく再起動後)には機能しなくなりましたが、キーはgithubとローカルシステムでそのままでした。key-mapped-to-domainを指定して「設定ファイル」を追加しました。上記のigor-ganapolsky-answerで提供される詳細。うまくいきます!
Parasrish

3
これは確かに私の問題を解決します!どうもありがとう!でも質問があります。メソッドを使用する前に、ssh -T git@github.com正しく応答しますgit push -u origin masterが、質問と同じエラーが発生します。正しく接続できるのに、プッシュしたりフェッチしたりできないのはなぜですか?
エデンハーダー

@EdenHarder同じ問題に直面しています。答えは見つかりましたか?
Vreddhi Bhat

64

この問題について知っています。sshキーを追加した後、sshキーをsshエージェントにも追加します(公式ドキュメントから)

ssh-agent -s
ssh-add ~/.ssh/id_rsa

すべて正常に機能した後、gitは適切なキーを表示できませんでした。


5
知事!私のMacOS Xで
作業しました

9
認証エージェントへの接続を開けませんでした。
Mona Jalal

これを実行してみてください:evalssh-agent -s
Vincent acent

@MonaJalalの使用ssh-add ~/.ssh/github_rsa
Anirban Nag 'tintinmj' 2018年

完璧です。それは働いています。ありがとうございました。👌
Erkam KUCET

62

SSH鍵を生成し(持っていない場合)、公開鍵をGithubアカウントに関連付ける必要があります。Github独自のドキュメントを参照してください。


2
このおかげで...私は今GitHubから生成されたSSHキーを得ました。端末で2つを関連付けるためにどのコマンドが使用されていますか?ありがとう!
webwrks 2012年

2
そのための端末コマンドはありません。回答にリンクしたドキュメントのステップ4を参照してください。
cdhowie 2012年

HTTPSを使用してリポジトリのクローンを作成しました。この場合、SSHキーを生成する必要がありますか?
Pabitra Dash 2015

@PabitraDashいいえ。HTTPSはSSHキーを使用しません。
cdhowie

51

これは私に起こりました。なんらかの理由で、私の起源がそれに気付かずにめちゃくちゃになりました:

設定がまだ正しいかどうかを確認します

git remote -v

URLはssh://git@github.com/YourDirectory/YourProject.gitのようにする必要があります。git@github.comが表示されない場合は、

git remote set-url origin git://github.com/YourDirectory/YourProject.git

正しく設定します。または、githubアプリを使用して、特定のリポジトリの設定パネルでプライマリリモートリポジトリのURLを確認および設定できます。


9
URLに注意してください。これらはhttpsとsshで異なり、このページの投稿ではそれが明確にされていません。各gitプロジェクトのプロジェクトルートディレクトリには.git / configファイルがあります。そこで、リモートおよびブランチ情報を設定できます。https用のリモートの設定:url = github.com/<yourGitUserName>/<yourGitProject>.git一方、git + sshの場合:url = git@github.com:<yourGitUserName> / <yourGitProject> .git間違ったURLを使用すると、公開キーのアクセス許可によってエラーが拒否されましたが、これはおそらくあまり明確なエラーではありません。
darKoram

私の場合、ファイナルでは次の部分で動作します:git remote set-url origin github.com/your_directory/your_project.git
rld

19

SSH経由でGitHubに接続していると仮定すると、以下のコマンドを実行してこれを確認できます。

$git config --get remote.origin.url

結果が次の形式git@github.com:xxx / xxx.github.com.gitである場合は、次の操作を行う必要があります。

SSHキーを生成します(または既存のキーを使用します)。持っている場合は、ssh-agent(ステップ2)とGitHubアカウント(ステップ3)にキーを追加するだけです。

以下はSSHキーを持っていない人向けです。

ステップ1公開/秘密RSAキーペアを生成します。

$ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

SSHキーを保存する場所と、使用するパスフレーズを確認するように求められます。

ステップ2 ssh-agentにキーを追加します

  • ssh-agentが有効になっていることを確認します

    $eval "$(ssh-agent -s)"

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

    $ssh-add ~/.ssh/id_rsa

ステップ3 SSHキーをアカウントに追加する

$sudo apt-get install xclip

$xclip -sel clip < ~/.ssh/id_rsa.pub

次に、コピーしたキーをGitHubに追加します

行く[設定] - > [ SSHキー(個人設定サイドバー) - > SSHキーを追加します - >フォームに必要事項を記入(キーがクリップボードにあり、ちょうど使用Ctrl + V) - > [キーの追加

上記の手順を実行した後、権限の問題を解決する必要があります。

参照リンク: SSHキーの生成


このソリューションはubuntuで機能しました、$ ssh-add /root/.ssh/id_rsa
Feras

これは私の環境でも奇妙な混乱を解決しました。私が提案する1つの変更は、xclipの依存性を回避することです。使用するだけですcat ~/.ssh/id_rsa.pub
ポグリンディス

19

まず、コンピュータに既存のSSHキーがあるかどうかを確認する必要があります。ターミナルを開いて実行します:

ls -al ~/.ssh

#or

cd ~/.ssh
ls

.sshディレクトリ内のファイルが一覧表示されます

そして最後に、あなたが見るものに依存します(私の場合は):

 github_rsa  github_rsa.pub known_hosts

RSAを設定してみてください。うまくいけば、「git push origin」の問題が解決します

$ ssh-keygen -lf ~/.ssh/github_rsa.pub

注: RSA証明書は鍵ペアであるため、プライベート証明書とパブリック証明書があり、プライベートはgithubに属しているため(この場合)、プライベートにはアクセスできませんが、このエラーが発生すると、パブリックが欠落する可能性があります(少なくともそれは私の場合でした、私のgithubアカウントまたはリポジトリはなんらかの方法でめちゃくちゃになり、以前に生成された公開鍵を「リンク」する必要がありました)


SHAこのコマンドから出力をgithub にコピーする必要がありますか?
IgorGanapolsky

いいえ、「ssh-keygen -lf〜/ .ssh / <YOUR_GITHUB_RSA_FILE.pub>」を実行するだけ
d1jhoni1b

そのため、「。sshディレクトリ内のファイルを一覧表示する」というコマンドも添付したので、どのファイルからキー(ssh-keygen)を抽出するかがわかります。RSA証明書はキーペアになっているため、プライベート証明書とパブリック証明書があり、プライベートはgithubに属しているため(この場合)、プライベートにはアクセスできませんが、このエラーが発生すると、パブリックが欠落する可能性があります(少なくともそれが私のケースでした、私のgithubアカウントまたはリポジトリがなんらかの理由でめちゃくちゃになり、以前に生成された公開鍵を「リンク」する必要がありました)
d1jhoni1b

$ ssh-keygen -lf〜/ .ssh / github_rsa.pub /home/mona/.ssh/github_rsa.pub:そのようなファイルやディレクトリはありません
Mona Jalal

「そのようなファイルまたはディレクトリはありません」とは、そのファイル名またはパスがないことを意味します... ls -al〜/ .sshを実行すると、何が得られますか?
d1jhoni1b

14

このエラーが発生しました。OSXをSierraにアップグレードしたばかりで、古いキーが登録されていないことがわかりました。

最初は「macOS SierraにアップグレードするとSSHキーが壊れ、自分のサーバーからロックアウトされる」と思った

しかし、私はそれを回避しました。私は私の既存のキーを再登録しなければならなかったことがわかりました:

ssh-add -K

そして、パスフレーズを入力してください...完了しました!


2
同じ問題、私のために働いた: `ssh-add -K〜/ .ssh / id_rsa`
mvladk

11

別の解決策:

SSHキーを作成し、入力します ssh-keygen -t rsa -C "your_email@example.com"ます。これにより、id_rsaファイルとid_rsa.pubファイルの両方が作成されます。

ローカルコンピューターのsshリストにid_rsaを追加します。 ssh-add ~/.ssh/id_rsa.

キーを生成した後、次を使用してpubkeyを取得します。

cat ~/.ssh/id_rsa.pub 

あなたは次のようなものを得るでしょう:

cat ~/.ssh/id_rsa.pub 

ssh-rsa AAAB3NzaC1yc2EAAAADAQABAAACAQCvMzmFEUPvaA1AFEBH6zGIF3N6pVE2SJv9V1MHgEwk4C7xovdk7Lr4LDoqEcqxgeJftwWQWWVrWWf7q9qCdHTAanH2Q5vx5nZjLB+B7saksehVOPWDR/MOSpVcr5bwIjf8dc8u5S8h24uBlguGkX+4lFJ+zwhiuwJlhykMvs5py1gD2hy+hvOs1Y17JPWhVVesGV3tlmtbfVolEiv9KShgkk3Hq56fyl+QmPzX1jya4TIC3k55FTzwRWBd+IpblbrGlrIBS6hvpHQpgUs47nSHLEHTn0Xmn6Q== user@email.com

このキー(値)をコピーしてgithub.comに移動し、設定(sshおよびpgpキー)で公開鍵を追加します。


10

独自のリポジトリにアクセスしていない場合、またはクローンされたリポジトリ内でクローンを作成している場合(「git submodule ...」コマンドを使用):

リポジトリのホームディレクトリ:

$ ls -a

1.「.gitmodules」を開くと、次のようなものが見つかります。

[submodule "XXX"]
    path = XXX
    url = git@github.com:YYY/XXX.git

最後の行を、プルする必要があるリポジトリのHTTPSに変更します。

[submodule "XXX"]
    path = XXX
    https://github.com/YYY/XXX.git

「.gitmodules」を保存し、サブモジュールのコマンドを実行すると、「。git」が更新されます。

2.「.git」を開き、「config」ファイルに移動すると、次のようなものが見つかります。

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
    ignorecase = true
    precomposeunicode = true
[remote "origin"]
    url = https://github.com/YYY/XXX.git
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
    remote = origin
    merge = refs/heads/master
[submodule "XXX"]
    url = git@github.com:YYY/XXX.git

最後の行を、プルする必要があるリポジトリのHTTPSに変更します。

    url = https://github.com/YYY/XXX.git

したがって、この場合、主な問題は単にURLにあります。リポジトリのHTTPSは、リポジトリページの上部に表示されます。


9

これは私のために働きました:

1-すべての起点を削除

git remote rm origin  

https://www.kernel.org/pub/software/scm/git/docs/git-remote.htmlを参照)

* remote:ブランチを追跡するリポジトリのセット(「リモート」)を管理します。

* rm:「名前付きのリモートを削除します。リモートのすべてのリモート追跡ブランチと構成設定が削除されます。」

2-すべてが削除されていることを確認します。

git remote -v  

3-新しいオリジンマスターを追加する

git remote add origin git@github.com:YOUR-GIT/YOUR-REPO.git

それはすべての人々です!


1
これらのコマンドを使用すると、githubのユーザー名とアカウントパスワードの入力を求められます。その後、ターミナルに入力することで簡単にgithubリンクにプッシュできます。git push -u origin master
Noha Salah

8

ssh-add -lGithubアカウントのSSHキーのリストにあるSSHキーのフィンガープリントを確認してください。

出力が空でも、githubアカウントで機能する秘密のSSHキーがあることがわかっている場合は、ssh-addこのキーで実行します(このキーはにあり~/.sshます。id_rsaデフォルトで名前が付けられているため、おそらく実行されますssh-add id_rsa)。

それ以外の場合は、次の手順に従ってSSHキーペアを生成します。


8

以前、私のphpプロジェクトの1つにgithubを使用していました。githubを使用しているときに、httpsの代わりにsshを使用していました。私は自分のマシンをそのようにセットアップし、コードをコミットしてプッシュするたびに、RSAキーのパスワードを尋ねてきました。

数日後、私はphpプロジェクトの作業を停止し、rsaパスワードを忘れました。最近、Javaプロジェクトに取り組み始め、bitbucketに移動しました。パスワードを忘れてしまい、それ回復する方法ないので、新しいプロジェクトにhttps(推奨)プロトコルを使用することに決め、質問で同じエラーが発生しました。

どのように解決したのですか?

  1. このコマンドを実行して、gitにsshではなくhttpsを使用するように指示します。

    git config --global url."https://".insteadOf git://
    
  2. リモートがあれば削除します

    git remote rm origin
    
  3. git initからgit pushまですべてをやり直せば動作します!

PS:デバッグプロセス中にマシンからsshをアンインストールしました。それを削除すると問題が解決すると考えています。はい、知っています!!:)


sshも機能するはずなのに、人々をhttpsに向けるのは良い考えではないと思います。さらに、これは企業プロキシの背後にいる人々にとっては機能しそうにありません。
Igor Stoppa 2016年

8

sshアクセスをリモートリポジトリへのhttpsアクセスに変更すると、問題は解決しました。

git remote set-url origin https_link_to_repository

git push -u origin master

5

私はあなたのための最良の答えを持っていると思います、あなたのgitアプリはルートユーザーディレクトリのid_rsa.pubを読みます

/home/root/.ssh/id_rsa.pub

そのため、/ home / your_username / .ssh / id_rsa.pubにある鍵をgitで読み取ることができません。したがって、/ home / root / .ssh /にキーを作成する必要があります

$ sudo su
$ ssh-keygen
$ cd ~/.ssh
$ cat id_rsa.pub

次に、githubアカウントにキーをコピーします。それは私のために働いた。あなたはそれを試すことができます。


これは私が探していた答えに私をさせてくれました。私は癖からsudoを使ってクローンを実行したので、間違った資格情報を探していました。sudoをオフにすると、私のクローンは正常に実行されました。
テカーン

4

SSHキーをすでに作成していてもエラーが発生する場合は、クローン先のフォルダーに対する読み取りと書き込みのアクセス許可をユーザーに与える必要があるためです。これを行うには、sudo chmod 777 <your_folder_name_here>"。もちろん、これはSSHキーを生成した後でも、まだこのエラーが発生します。これが将来のユーザーに役立つことを願っています。

編集する

これに追加するには、git bashを使用している場合、Windowsでadminを使用します。


この。これも問題を引き起こす可能性があります。
KevinO 2018年

1
これは私の問題でしたが、フォルダに777アクセス許可を設定することはお勧めしません。私の場合、フォルダはルートユーザーが所有しており、ルート以外のユーザーアカウントにアクセス権を付与する必要がありました。私はこれを次のように行いました:sudo chown -R $USER:$USER <your_folder_name_here>
デビッド

@David、私もそれをお勧めします。777はかなりハックで安全ではありません。
ケビン

3

最近同じ問題がありました。これはすぐに修正が必要な場合に役立ちますが、システムを再起動するたびに実行する必要があります

ターミナルから次を実行: ssh-add ~/.ssh/id_rsa

システムパスワードを入力してください。


3

私の発見のいくつかを追加したいと思います:

を使用している場合はGitBash、SSHキーがに格納されていることを確認してください~/.ssh/id_rsa

デフォルトでGitBashは、~/.ssh/id_rsaSSHキーのデフォルトパスとして検索されます。

ファイル名もid_rsa重要です。SSHキーを別のファイル名またはパスに保存すると、Permission Denied(publickey)エラーがスローされます。


3

OKこれにはいくつかの解決策があります。それらのいくつかはすでに言及されているかもしれませんが、それらを一緒に保つためだけです:

  • キーが存在することを確認します。デフォルトでは、別の〜/ .ssh /フォルダー、つまりid.rsaおよびid.rsa.pubです。

  • キーに正しい権限があることを確認してください。chmodを実行できます。

    chmod 600〜/ .ssh / id_rsa

    chmod 644〜/ .ssh / id_rsa.pub

  • 公開鍵(id_rsa.pub)の内容がリモートリポジトリ設定でアップロードされたものと一致することを確認してください

  • 最後に、sshエージェントの問題を修正します 。ssh-add

その他の情報:https : //itcodehub.blogspot.com/2015/01/ssh-add-problems-with-ssh-agent-and.html


FAT32としてフォーマットされたUSBドライブを使用して、sshキーをあるコンピューターから別のコンピューターにコピーしました。これにより、ファイルの権限が変更されました。Ubuntuでは、必要なときに自動的にSSHパスワードを要求されるのに慣れていますが、それはchmod、あなたが説明するように実行するまで、黙って行われませんでした。ありがとう。
リデル

1

Mac UIのGitHubを使用している場合は、設定を確認してログインしていることを確認してください。


1

「git push」中に同じエラーが発生しました。クライアント側では、2つのオリジンとマスターがありました。私はそれを削除しました、そしてそれはうまくいきました。


1

ログインにHttps URLを使用できます

git pushと言ったときにsshでログインしようとしていると思います。パスワードだけを尋ねる場合、sshを介して接続していると見なして、httpのURLを使用することをお勧めします。


1

また、ubuntuでは、BitBucketの設定ですでにSSHキーが入力されていたにもかかわらず、この問題が発生しました。その理由は、私は次のことを試していたからです。

sudo git push origin master

なぜだかわかりませんが、それを使用して解決しました

git push origin master

sudoは使用されません。


1

私はこれを試しました-

eval "$(ssh-agent -s)"

それから私は走ります

ssh-add ~/.ssh/path-to-the-keyfile

そしてあなたが実行できるキーを生成するために

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

これにより、鍵のペア(公開および秘密)が生成されます。

このキーをgithubに保存して、詳細を確認できます。GitHubアカウントに新しいSSHキーを追加する

私はそれが他の人を助けることを願っています:)


1

@Batmanと同様の問題がありました。ただし、これを/ usr / local / src / projectnameで実行していたため、sudoなしで実行することはできませんでした。

-Eフラグを追加して、環境(〜/ .ssh /パス)を保持します。

$ sudo -E git clone git@your_repo

man sudoから:

-E、--preserve-envユーザーが既存の環境変数を保持したいことをセキュリティポリシーに示します。ユーザーが環境を保持する権限を持っていない場合、セキュリティポリシーはエラーを返すことがあります。


1

これが発生するシナリオの1つは、リポジトリを作成した後にGitHubの指示に従う場合です。Gitは、このようなものでリモコンを追加するように指示します。

git remote add origin git@github.com:<user>/<project>.git

<>の内容をアカウントに関連する値に置き換えます。

解決策は、.gitサフィックスを削除することです。次のようにリモートを追加します。

git remote add origin git@github.com:<user>/<project>


1

tl; dr

~/.ssh/configプット

PubkeyAcceptedKeyTypes=+ssh-dss

シナリオ openSSH> 7のバージョンを使用している場合、タッチバーMacBook Proで言うように、ssh -V
OpenSSH_7.4p1, LibreSSL 2.5.0

また、元のキーがGithubに置かれていた古いMacもありました。id_dsaキーを使用している可能性があります。OpenSSH v7は、これらのDSAキー(これを含むssh-dss)の使用をデフォルトで設定していませんが、次のコードを~/.ssh/config

PubkeyAcceptedKeyTypes=+ssh-dss

私のために働いたソースはこのGentooニュースレターです

これで、少なくともGitHubを使用して、キーをRSAに修正できます。


1

git pullリモートホストを使用して同様のエラーメッセージの解決策を検索しているときに、このページを見つけました。

$ git pull
Permission denied (publickey).
fatal: Could not read from remote repository.

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

ローカルマシンからリモートホストにを介して接続されましたssh -AY remote_hostname。これはOPの質問に対する解決策ではありませんが、このページに出くわした他の人には役立ちます。ここに投稿してください。

私の場合、git pullローカルマシンで正常に動作することに注意してください(つまり、sshキーがセットアップされ、GitHubアカウントに追加されているなど)。私はこれを~/.ssh/config私のラップトップに追加することで私の問題を解決しました:

Host *
     ForwardAgent yes

私は、リモートホストに再接続さssh -AY remote_hostnameれ、git pull今で働いていました。設定の変更により、ローカルマシンから任意のホストにsshキーペアを転送できます。-AオプションsshするSSHセッション中に実際に転送し。詳細はこちら。


0

多分あなたのssh-agentは有効になっていませんあなたはそれを試すことができます

  1. gitをダウンロード

http://git-scm.com/

  1. インストールする

  2. ssh-agentを有効にする

C:\ Program Files \ Git \ cmd

start-ssh-agent


0

GitHubアカウントダッシュボードに移動し、プロジェクトリポジトリを見つけて、[ 設定 ]タブをクリックします。[ キーのデプロイ ]で、SSHキーを追加する必要があります。ターミナルを開いて次のように入力します。

cat ~/.ssh/id_rsa.pub | pbcopy 

これにより、id_rsa.pubファイルからキーがコピーされます。GitHubダッシュボードに戻って貼り付け、[ キーの追加 ] クリックするだけです。

同じソリューションがBitbucketアカウントに適用されます。

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