164

新しいリポジトリを作成しましたが、奇妙なエラーが発生しました。以前に 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

21 に答える 21

246

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

HTTPS を気にせず、簡単な修正を探している人は、この回答の一番下までスクロールして、「怠惰な人のために」の手順を参照してください

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

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」の前に 1 つのスペースが必要です。

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

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

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 に戻る
  • プロジェクトを含むディレクトリに移動します
  • オリジンを 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
于 2014-09-30T21:15:54.207 に答える
63

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

ssh-add ~/.ssh/id_rsa
于 2015-01-19T21:46:23.890 に答える
31

ジェームズのコメントによると、2021年を更新します。

「リポジトリごと」ではなく、キーをワークスペースに追加する必要がありました。

これらのキーは読み取り専用であり、ワークスペースのキーはプッシュが許可されているためです。

bitbucket.org/<my-workspace>/workspace/settings/ssh-keys 

必ず子リポジトリから同じキーを削除してください。そうしないと、ワークスペースに追加できなくなります。


元の回答 (2013):

再フォーマットされたということは、ssh の公開鍵と秘密鍵 (~/.ssh 内) をおそらく削除したことを意味します。

「 GitBash を使用して Git 用に SSH をセットアップする」に続く「Bitbucket で 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

「 Mercurial/BitBucket と JetBrains ソフ​​トウェアの統合」の画像

于 2013-04-18T05:58:59.750 に答える
25

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

git remote remove origin

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

git remote add origin httpsUrl

github 資格情報を要求します。資格情報を入力してから、次を使用して git にプッシュしてみてください。

git push origin master
于 2016-11-18T05:01:34.983 に答える
4

私も同じ問題を抱えていました。SSH キーが正しく設定されました。この問題をこのように修正しました。

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

于 2014-08-10T12:53:46.870 に答える
2

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

1 - HTTPS と SSH で接続 URL が異なる

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を避けるための便利なヒント

于 2016-08-01T14:05:11.263 に答える
0

あるリポジトリでまったく同じエラーが発生しました。コミットをプッシュしようとすると、突然、他のすべてのリポジトリが正常に動作しました。問題は SSH キーにあるようです (以前のコメントから既にわかっているように) - bitbucket で に移動しView Profile、 をクリックしますManage Account

左側で をクリックし、SSH Keysシステムにあるものを ~/.ssh/ ディレクトリの下に追加します。

まだ生成されていない場合は、投稿のいずれかの手順を使用しますが、デフォルトの id_dsa.pub ファイルまたはカスタムの名前付きファイルを使用して、後で-iキーへのパスを含むオプションを要求するようにしてください。つまり接続する

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

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

于 2015-08-10T18:37:57.077 に答える