これは、Windows で Git と BitBucket を使い始めたばかりで、Bash に慣れていない人のために書いています (これはよくある問題であり、質問内のエラー メッセージを検索したときの Google の検索結果の上位に表示されるためです)。
HTTPS を気にせず、簡単な修正を探している人は、この回答の一番下までスクロールして、「怠惰な人のために」の手順を参照してください。
実際の問題を解決したい場合は、以下の手順に従ってください。
SSH の問題をできるだけ早く修正する
これは、VonC によってリンクされた URL から派生した一連の指示です。可能な限り弾力性があり、簡潔になるように変更されました。
まだ設定していない場合は、グローバル情報を設定します。
$ 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