BitbucketのGitリポジトリにプッシュできません


143

新しいリポジトリを作成しましたが、奇妙なエラーが発生しています。以前にBitbucketでGitを使用したことがありますが、再フォーマットしたところ、Gitを動作させることができなくなったようです。コミットした後、自分のメールと名前をグローバルに追加する必要がありましたが、その後はうまくコミットしました。

コマンドを使用しようとすると

git push origin master

動作しません。私はこのメッセージを受け取ります:

$ git push 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.

私はここで途方に暮れています。私がこのリポジトリを共有している私の友人は、うまくアクセスしてそれをうまくプッシュしましたが、うまく動かないようです。


4
リモートURLでgitsの代わりにhttpsを使用できます。例:yourusername@bitbucket.org/teamname/repository.git
Ali

1
お使いのマシンにSSHを設定する方法に関するAtlassianのチュートリアルに厳密に従って、同じ問題を解決しました:confluence.atlassian.com/display/BITBUCKET/Set+up+SSH+for+Git
sws

回答:


229

WindowsでGitとBitBucketを使い始めたばかりで、Bashに精通していない人のためにこれを書いてください(これは一般的な問題であり、質問内のエラーメッセージを検索すると、Googleの上位の結果になるためです)。

HTTPSを気にせず、簡単な解決策を探している人は、この回答の下部までスクロールして、「THE THE LAZY」の説明を参照してください

実際の問題を解決したい場合は、以下の手順に従ってください。

SSHの問題をできるだけ早く修正する

これは、VonCによってリンクされたURLから派生した一連の指示です。できるだけ弾力性があり、簡潔になるように変更されました。

  • $またはで始まらない行は入力しないでください$$これは、GitBashに入力するものです)。

  • GitBashを開く

まだ設定していない場合は、グローバル情報を設定します。

$ git config --global user.name "Your Name"
$ git config --global user.email "you@example.com"

OpenSSHを確認します。

$ ssh -v localhost
OpenSSH_4.6p1, OpenSSL...

そのようなものを参照してください?

  • はい:続行します。
  • いいえ:FOR THE LAZYセクションにスキップするか、VonCのリンクされた記事に従ってください。

キーがすでに生成されているかどうかを確認します。

$ ls -a ~/.ssh/id_*

ファイルが2つある場合は、次の手順をスキップできます。

$ ssh-keygen

すべてをデフォルトのままにして、パスフレーズを入力します。次のコマンドで結果が表示されます。

$ ls -a ~/.ssh/id_*

既存の構成ファイルを確認します。

$ ls -a ~/.ssh/config

結果が得られた場合は、このファイルで誤った情報を確認してください。ファイルが存在しない場合は、以下を実行します。

$ echo "Host bitbucket.org" >> ~/.ssh/config
$ echo " IdentityFile ~/.ssh/id_rsa" >> ~/.ssh/config

内容を確認します。

$ cat ~/.ssh/config

Host bitbucket.org
 IdentityFile ~/.ssh/id_rsa
  • 「IdentityFile」の前の単一のスペースが必要です。

GitBashを実行するたびにSSHエージェントを起動していることを確認します。

$ cat ~/.bashrc
  • という関数が表示された場合start_agent、このステップはすでに完了しています。
  • ファイルがない場合は、続行します。
  • この機能を含まないファイルがある場合、あなたは厄介な状況にあります。(以下の手順を使用して)追加することはおそらく安全ですが、そうでない場合があります!不明な場合は、以下の手順を実行する前に.bashrcのバックアップを作成するか、スキップして「FOR THE LAZY」セクションに進んでください。

以下をGitBashに入力して、.bashrcファイルを作成します。

$ echo "SSH_ENV=$HOME/.ssh/environment" >> ~/.bashrc
$ echo "" >> ~/.bashrc
$ echo "# start the ssh-agent" >> ~/.bashrc
$ echo "function start_agent {" >> ~/.bashrc
$ echo "    echo \"Initializing new SSH agent...\"" >> ~/.bashrc
$ echo "    # spawn ssh-agent" >> ~/.bashrc
$ echo "    /usr/bin/ssh-agent | sed 's/^echo/#echo/' > \"\${SSH_ENV}\"" >> ~/.bashrc
$ echo "    echo succeeded" >> ~/.bashrc
$ echo "    chmod 600 \"\${SSH_ENV}\"" >> ~/.bashrc
$ echo "    . \"\${SSH_ENV}\" > /dev/null" >> ~/.bashrc
$ echo "    /usr/bin/ssh-add" >> ~/.bashrc
$ echo "}" >> ~/.bashrc
$ echo "" >> ~/.bashrc
$ echo "if [ -f \"\${SSH_ENV}\" ]; then" >> ~/.bashrc
$ echo "     . \"\${SSH_ENV}\" > /dev/null" >> ~/.bashrc
$ echo "     ps -ef | grep \${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {" >> ~/.bashrc
$ echo "        start_agent;" >> ~/.bashrc
$ echo "    }" >> ~/.bashrc
$ echo "else" >> ~/.bashrc
$ echo "    start_agent;" >> ~/.bashrc
$ echo "fi" >> ~/.bashrc

ファイルが正常に作成されたことを確認します(「yourusername」が表示されている場所のみが異なります)。

$ cat ~/.bashrc
SSH_ENV=/c/Users/yourusername/.ssh/environment

# start the ssh-agent
function start_agent {
    echo "Initializing new SSH agent..."
    # spawn 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
}

if [ -f "${SSH_ENV}" ]; then
     . "${SSH_ENV}" > /dev/null
     ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
        start_agent;
    }
else
    start_agent;
fi
  • GitBashを閉じて、再度開きます。
  • パスフレーズを要求されます(以前に生成したSSHファイル用)。
  • プロンプトが表示されない場合は、パスフレーズを設定していないか、GitBashが.bashrcスクリプトを実行していません(奇妙なため、内容を確認することを検討してください)。これをMac(OS X)で.bashrc実行している場合、デフォルトでは実行されません- .bash_profileです。これを修正するには、このスニペットをあなたの中に入れてください.bash_profile[[ -s ~/.bashrc ]] && source ~/.bashrc

パスフレーズを入力しなかった場合、GitBashの起動時に次のようなものが表示されます。

Initializing new SSH agent...
succeeded
Identity added: /c/Users/yourusername/.ssh/id_rsa (/c/Users/yourusername/.ssh/id_rsa)

そして、以下は結果を返すはずです:

$ ssh-add -l

ただし、次の場合ssh-add -l

Could not open a connection to your authentication agent.

SSHエージェントを生成しなかったため、おそらく.bashrcが原因です。

GitBashを起動すると、次のように表示されます。

Initializing new SSH agent...
sh.exe": : No such file or directory

これは、ファイルにエコーするときに$を\でエスケープするのを忘れたことを意味します(つまり、変数が展開されました)。これを解決するには、.bashrcを再作成します。

エージェントが実行中であり、キーが追加されていることを確認します。

$ ssh-add -l

これに似たものを返すはずです:

2048 0f:37:21:af:1b:31:d5:cd:65:58:b2:68:4a:ba:a2:46 /Users/yourusername/.ssh/id_rsa (RSA)

次のコマンドを実行して、公開鍵を取得します。

$ cat ~/.ssh/id_rsa.pub

(「ssh-rsa……」で始まるものを返すはずです

  • GitBashウィンドウのアイコンをクリックします
  • 編集をクリックします
  • マークをクリック
  • マウスを使用して公開鍵を強調表示します(リーディングssh-rsaビットとトレーリング== youremail@yourdomain.comビットを含む)。
  • ウィンドウを右クリック(コピーを実行)
  • 公開鍵をメモ帳に貼り付けます。
  • すべての改行を削除して、1行だけになるようにします。
  • CTRL+A次に、CTRL+Cを押して、公開鍵を再びクリップボードにコピーします。

次の手順を実行して、BitBucketで秘密鍵を構成します。

  • ブラウザーを開き、BitBucket.orgサイトに移動します。
  • BitBucket.orgにログイン
  • アバターをクリックします(右上)
  • [アカウントの管理]をクリックします
  • (左側のメニューの[セキュリティ]の下にある)[SSHキー]をクリックします。
  • キーの追加をクリックします
  • Global Public Keyラベルを入力してください
  • メモ帳からコピーした公開鍵を貼り付けます

Global Public Keyエントリは今のキーのリストに表示されるはずです。

  • GitBashに戻る
  • プロジェクトを含むディレクトリにcdします
  • オリジンをSSHバリエーションに変更します(FOR THE LAZYステップを実行した場合は変更されません)。

リモコンを確認します。

$ git remote -v

SSH URLに切り替えます。

$ git remote set-url origin git@bitbucket.org:youraccount/yourproject.git

正常に動作していることを確認します。

$ git remote show origin

次のようなものが表示されます。

Warning: Permanently added the RSA host key for IP address '...' to the list of known hosts.
* remote origin
  Fetch URL: git@bitbucket.org:youruser/yourproject.git
  Push  URL: git@bitbucket.org:youruser/yourproject.git
  HEAD branch: master
  Remote branch:
    master tracked
  Local ref configured for 'git push':
    master pushes to master (fast-forwardable)

できた!

SSHの代わりにHTTPSを使用することを選択できます。リモート操作中にパスワードを入力する必要があります(一度入力すると一時的にキャッシュされます)。HTTPSの設定方法は次のとおりです。

レイジーのために

VonCの説明に従ってSSHの問題を修正する必要があります。ただし、急いでコミットしていて、現在新しい公開鍵を生成するツール/時間/知識がない場合は、オリジンをHTTPS代替に設定します。

> https://accountname@bitbucket.org/accountname/reponame.git

TortoiseGitコマンドラインツールなどのGUIツールを使用する。

これは、この代替オリジンURLのドキュメントです。

オリジンが存在しない場合にオリジンを追加するコマンドライン:

git remote add origin https://accountname@bitbucket.org/accountname/reponame.git

既存の原点を変更するコマンドライン:

git remote set-url origin https://accountname@bitbucket.org/accountname/reponame.git

注:アカウント名はメールではありません。

グローバル情報を設定することもできます:

git config --global user.name "Your Name"
git config --global user.email "you@example.com"

その後、もう一度プッシュしてみてください(再度コミットする必要はありません)

git push origin master

echo "Host bitbucket.org" >>〜/ .ssh.config、最後の '。'にすべきではありません 「/」になりますか?
Peter

1
上記のすべてを追加したことがありますが~/.bashrc、それでもコマンドを実行する ssh-all -lと表示されますまだ表示されてNo agent いる場合このコマンドssh-agent /bin/bashを試してみてください Initializing new SSH agent...
shinesecret

5
StackOverflowで出会った中で最高の答えの1つ
Sambhav Sharma

1
@JGallardo-いい質問です!良い知らせはありません。これらは、bashシェルスクリプトの変数です。これらは、バッチファイルの環境変数に似ています。
Graeme Wicksted 2015年

1
これが受け入れられない答えであるという事実は私の心を傷つけます。素晴らしい記事!
ruby_newbie

58

このエラーは、秘密鍵をに追加し忘れた場合にも発生しますssh-agent。これを行うには:

ssh-add ~/.ssh/id_rsa

4
それが私の場合の答えでした。新しいキーを作成するときはいつも忘れていました。
amertkara 2015

1
これは、上記の投稿を通過した後の助けでした
Tony Merritt

それは私のために働いた:)しかし、あなたはあなたのローカルディレクトリにすでにssh秘密鍵とあなたのbitbucketアカウントに登録された公開鍵を持っていることを確認する必要があります
Daniel

25

再フォーマット済みとは、おそらく〜/ .sshにある公開および秘密のSSHキーを削除したことを意味します。

「GitBashを使用してGit用にSSHを設定する」に記載されているように、それらを再生成し、BitBucketプロファイルで公開SSH鍵を公開する必要があります。

アカウント->アカウントの管理-> SSHキー:

http://solvedproblems.hydex11.net/_media/solved-problems/crazy-problems/bitbucket_manage_account.png

次に:

http://solvedproblems.hydex11.net/_media/solved-problems/crazy-problems/bitbucket_add_ssh.png

「からの画像 JetBrainsのソフトウェアでのMercurial /のBitbucketの統合


7
これに少し追加するだけです。BitBucketを使用している場合(スクリーンショットに表示)、SSHキーをアカウントのSSHキーに追加していることを確認します([アカウント]-> [アカウントの管理]-> [SSHキー])。リポジトリ設定を介してそれを展開キーとして追加すると、そのキーは読み取り専用の操作にのみ使用できます(コミットされません)。
welshk91 2015年

@ welshk91同意する。より詳細な写真を追加するために、回答を修正しました。
VonC 2015年

1
@VonC-これを投稿してくれてありがとう。私はこれをWindowsマシンで機能させるために無駄な努力をしてきましたが、これでようやくうまくいきました。ありがとう、ベン
ben18785

21

私はコマンドを使用してリモートを削除することでこれを解決しました:

git remote remove origin

そして、sshの代わりにhttps URLを使用してリモートを追加しようとしました

git remote add origin httpsUrl

githubクレデンシャルを要求します。認証情報を入力し、次を使用してgitにpushしてみてください:

git push origin master

1
これは私を助けました。これが私の場合の正解です。ありがとう
binsnoel 2017年

わたしにはできる。オリジンを削除せず、新しいオリジンを追加しただけです
シンタロイド2017年

率直な回答をありがとう。魅力のように働きました-それはまさに私が探していたものでした。
Alexandra

4

同じ問題がありました。SSHキーが正しく設定されました。この問題をこのように修正しました。

Bitbucketで新しいプロジェクトを作成した後、クローンを使用します。ターミナルで複製コマンドを入力すると、空のプロジェクトがコンピューターに複製されます。その後、ファイルをこのディレクトリにコピーし、コミットしてbitbucketにプッシュすることができます。


1
おかしいですね。今日OPと同じ問題が発生しましたが、再インストールを行わなかったり、システムを変更したりせずに、私のキーは問題ありませんでした。git remote addプロセスは、ちょうど今日の仕事をしませんでした-私はプッシュしようとしたときに認証エラーが発生しました-しかし、.gitを削除してから使用してgit clone、私のソースを&再コピー(ただREADME.md)の代わりに罰金を動作します。ラファエルありがとう-あなたの答えがなければ、私は確かにそれを試すつもりはなかったでしょう。
クリス

このソリューションがあなたを助けてくれてうれしい
Rafael

1
ご回答有難うございます。新しいディレクトリを作成し、その新しいディレクトリにクローンを作成するだけで問題を修正できました。 mkdir /tmp/JUNK; cd /tmp/JUNK; git clone ...; cd ..; rm -rf JUNK
レッドクリケット

4

〜/ .sshディレクトリに設定ファイルが必要です
ref:https : //confluence.atlassian.com/bitbucket/set-up-ssh-for-git-728138079.html設定ファイルに以下の
設定を追加します

Host bitbucket.org
 IdentityFile ~/.ssh/<privatekeyfile>

1
あなたは私の命を救いました!
Alecs 2017

2

私が経験した混乱を誰かから救うかもしれない2つの小さな説明:

1-接続URLはHTTPSとSSHで異なります

https経由で接続する場合は、

https://your_account_name@bitbucket.org/owner-account/repo-name.git

ただし、SSH経由で接続する場合、アカウント名は常に「git」です

ssh://git@bitbucket.org/owner-account/repo-name.git

アカウント名を前にしてSSHに接続しようとすると、元の投稿者が受け取ったエラーが発生します。これは、git @への接続テストを実行してから、誤ってユーザー名で試してエラーを表示する方法です。

2-チームアカウント経由のSSHキーは2017年に廃止されます

チームアカウントにSSHキーを設定する場合は、個人アカウントに切り替えることをお勧めします。eを避けるのに役立つヒント


1

SourceTree(2.4.1を使用しています)を使用している場合、SSHキーを生成してBitbucket設定に追加する簡単な方法を見つけました。これで問題は解決しました。

  1. SourceTreeで、「設定」に移動します。
  2. [アカウント]タブに移動し、アカウントを選択します。
  3. SSHキーを生成してクリップボードにコピーするオプションがあるはずです。
  4. それをコピーしたら、ブラウザーでBitbucketに移動します。[アバター]-> Bitbucket設定に移動します。
  5. SSHキーに移動します。
  6. [キーを追加]をクリックします
  7. コピーしたキーを貼り付けます。

Bitbucketから、SSHキーがアカウントに追加されたという確認メールを受け取りました。

参考までに、macOSでは、ターミナルを使用して、次のコマンドでデバイス用に生成されたキーを確認できます。ここに、生成したキーが保存されます。

ls -la ~/.ssh

他の人が述べたように、このドキュメントは私を助けました:Bitbucket CloudでSSHプロトコルを使用する


1

AtlassianチュートリアルのようにSSHを実行し、秘密キーがリポジトリではなくプロファイルに貼り付けられていることを確認します:)


記載へのリンクを含めていただけませんAtlassian tutorialか?キーをプロファイルに貼り付ける手順はどれですか。また、キーがリポジトリに貼り付けられているかどうかを確認するにはどうすればよいですか。
EmmanuelB

彼女はここにいます。ケースの組み合わせに最適なものを選択してください!confluence.atlassian.com/bitbucket/...
ヘクター

0

1つのリポジトリでこれと同じエラーが発生しました-突然、コミットをプッシュしようとしたときに、他のすべてのリポジトリが正常に機能しました。問題はSSHキーにあるように見えます(以前のコメントですでにご存じのとおり)-bitbucketで次に移動しView ProfileManage Account

左側で、 SSH Keysシステム上のファイルを〜/ .ssh /ディレクトリの下に追加します。

まだ生成されていない場合-いずれかの投稿からの指示を使用しますが、デフォルトのid_dsa.pubファイルまたはカスタムの名前付きファイルを使用していることを確認してください-i。接続する

ssh -i ~/.ssh/customkeyname username@ip_address

bitbucketでアカウントにローカルキーを追加すると、リポジトリとの対話を開始できるようになります。


0

私にとって最も効果的な解決策は、プッシュを小さなチャンクに分割することでした。

大きなスクリーンショット画像ファイル(10mb +)をコミットから削除する

最終的には、binファイルの制限に関するセキュリティの問題はありませんでした


上記のエラーが表示され、OPによって指摘されましたが、認証/セキュリティの問題ではありませんでしたか?それはあなたのコミットの大きさでしたか?
JohnZaj

それが起こったのです
ハリーボッシュ

0

このエラーは、リポジトリが存在しない場合にも表示されます。レポ名にダッシュが欠けているのを見るまで、私はすべての答えを試しました


0

エラーの場合:

[エラー] リポジトリへのアクセスが拒否されました。展開キーを介したアクセスは読み取り専用です。致命的:リモートリポジトリから読み取れませんでした。正しいアクセス権があり、リポジトリが存在することを確認してください。

[エラー] 致命的:リモートリポジトリから読み取れませんでした。

[エラー] 致命的:「https」のリモートヘルパーが見つかりません

私はこの手順に従って解決しました:

まず、この依​​存関係をインストールします。

$ yum install expat expat-devel openssl openssl-devel

次にgitを削除します。

$ yum remove git git-all

この場合、最後のバージョンでGitをビルドしてインストールします。

$ wget https://github.com/git/git/archive/v2.13.0.tar.gz
$ tar zxf v.2.13.0.tar.gz
$ cd git-2.13.0/

次に、構成のために:

$ make configure
$ ./configure --with-expat --with-openssl

そして最後に次のようにインストールします:

$ make 
$ make install install-doc install-html install-info

これで終わりです。今度はhttpsを使用してリポジトリを構成します。

$ git remote add origin https://github.com/*user*/*repo*.git
# Verify new remote
$ git remote -v

リモートサーバーでsshキーを設定している場合は、それを削除する必要があります。


0

このエラーが発生しました

リモートホストによってbitbucket.orgへの接続が閉じられました。致命的:リモートリポジトリから読み取れませんでした。正しいアクセス権があることを確認してください。

それから私は試しました

git config --global user.email "you@example.com"

引用符なしで働いた。


0

gitコマンドラインでページェントが生成したキーが機能していなかった(Windows 10)。

Serverfaultで私の答えを参照してください


0

私はmacOSを使用していますが、次にbitbucketで公開鍵を設定しましたが、次にプッシュしようとしたときに、

リポジトリへのアクセスが拒否されました。

致命的:リモートリポジトリから読み取れませんでした。

正しいアクセス権があり、リポジトリが存在することを確認してください。

私がしなければならなかったのは、ステップ2です。BitbucketSSHキーのセットアップガイド、特に3番目のステップの説明に従って、ssh-agentにキーを追加します

(macOSのみ)コンピューターが再起動するたびにパスワードを記憶するように、〜/ .ssh / configファイルを開いて(または作成して)、ファイルに次の行を追加します。

ホスト*
UseKeychainはい

同じ問題を持つMacユーザーに役立つことを願っています。



0

私はこの問題を抱えていて、私は頭がおかしいと思いました。SSHを20年間使用しています。そして2012年以降SSH経由でgit ...しかし、なぜ私の自宅のコンピューターで私のbitbucketリポジトリを取得できなかったのですか?

さて、私は2つのbitbucketアカウントを持ち、4つのSSHキーをエージェント内にロードしました。私の.ssh / configが正しいキーを使用するように構成されていても。sshが接続を初期化しているときに、エージェントにロードするためにそれらを使用していました。そのため、個人のbitbucketアカウントにログインしていました。

次に、リポジトリをフェッチしようとすると、Forbiddenエラーが発生します。理にかなっています。

エージェントからキーをアンロードしました

ssh-add -d ~/.ssh/personal_rsa

それから私はリポジトリをフェッチすることができました。

...後で、指定されたIDのみを使用するように強制できることがわかりました

 Host bitbucket.org-user2
     HostName bitbucket.org
     User git
     IdentityFile ~/.ssh/user2
     IdentitiesOnly yes

私はその最後のオプションについて知りませんでした IdentitiesOnly

bitbucketドキュメント自体から

https://blog.developer.atlassian.com/different-ssh-keys-multiple-bitbucket-accounts/


-1

ちょうど試して

git remote add origin <HTTP URL>

1
bitbucket / github / etc /にフェッチ/プッシュするたびにユーザー名/パスワードを入力するのは好きではありません
Mathieu J.
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.