bitbucket のプライベートリポジトリを clone しようとしたら "Permission denied" って怒られる
Bitbucket上に作ったプライベートリポジトリを、ローカル環境に初めて clone するときに Permission denied って言われる。
[sseze@centos63 ~]$ git clone git@bitbucket.org:sseze/**********.git Initialized empty Git repository in /home/sseze/**********/.git/ The authenticity of host 'bitbucket.org (207.223.240.182)' can't be established. RSA key fingerprint is 97:8c:1b:f2:6f:14:6b:5c:3b:ec:aa:46:46:74:7c:40. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'bitbucket.org,207.223.240.182' (RSA) to the list of known hosts. Permission denied (publickey). fatal: The remote end hung up unexpectedly
ここによると、一度 Bitbucket に ssh 接続せよ、と書いてある。なるほど、確かに公開鍵認証通さないで見れるはずがない。
Bitbuket 接続用に ssh-keygen で鍵を作成する。
$ cd .ssh/ $ ssh-keygen -b 2048 -f centos63-key
~/.ssh/config も書いておく。
$ vi ~/.ssh/config # 以下を追記 # bitbucket 接続用ダミー Host bb User git HostName bitbucket.org IdentityFile ~/.ssh/centos63-key
config を初めて書く場合は、権限設定も忘れずに。
$ chmod 600 ~/.ssh/config
接続してみる。
[sseze@centos63 .ssh]$ ssh bb Enter passphrase for key '/home/sseze/.ssh/centos63-key': PTY allocation request failed on channel 0 conq: logged in as sseze. You can use git or hg to connect to Bitbucket. Shell access is disabled. Connection to bitbucket.org closed.
問題なく接続できたら、git clone できるか試してみる。
[sseze@centos63 ~]$ git clone git@bitbucket.org:sseze/**********.git Initialized empty Git repository in /home/sseze/**********/.git/ remote: Counting objects: 6, done. remote: Compressing objects: 100% (4/4), done. remote: Total 6 (delta 0), reused 0 (delta 0) Receiving objects: 100% (6/6), 15.57 KiB, done.
【番外編】Permission denied (publickey). fatal: The remote end hung up unexpectedly と言われ続けたら…
CentOS で git clone しようとしたところ、公開鍵を登録しても、ずっと Permission denied と怒られたまま、2時間ほど費やしてしまった。
Githubのドキュメントを見て、ようやくミスに気づいた。ssh-add してないじゃん。
CentOS で clone する前、Mac では、ssh-add しなくとも git clone できていた。
Bitbucket の公式ドキュメントによると、MacOSX 10.6.8 以降だと、最初の接続を確立したときに git-agent に読み込まれるらしい。
CentOSにログインする度に、
$ eval ssh-agent $ ssh-add ~/.ssh/centos63-key
と打ってもいいのだが、tmuxを使ったりする場合、ウィンドウやペインを新規作成する度に ssh-add するのはとても面倒である。
また、上記をそのまま .bash_profile (ログイン時に実行) や .bashrc (シェルにログインする度に実行) に追記すると、毎回秘密鍵のパスフレーズを打たなければならない。これも面倒である。
よって、.bash_profile に以下を追記して、CentOS起動時に ssh-agent の起動、ssh-add への秘密鍵・パスフレーズの登録をまとめて行うようにする。一度パスフレーズを登録してしまえば、CentOSを再起動するまで、パスフレーズは打たずに済む。
# .ssh-agent-info に既に環境変数が書かれていたら読み込む source ~/.ssh-agent-info # ssh-agent が立ち上がっているかどうかの判定。 ssh-add -l >&/dev/null # ssh-add は ssh-agent が立ち上がっていないと不正な使用方法 # として判定される (つまり、終了ステータスは$?=2) if [ $? == 2 ] ; then # $?==2 を満たす場合、ssh-agent を立ち上げる echo -n "ssh-agent: restart...." ssh-agent >~/.ssh-agent-info source ~/.ssh-agent-info fi if ssh-add -l >&/dev/null ; then # ssh-add -l が正常に実行できる場合 ($?=0) echo "ssh-agent: Identity is already stored." else # パスフレーズが登録されていない場合 ($?=1) ssh-add ~/.ssh/centos63-key fi # http://d.hatena.ne.jp/elwoodblues/20070619/1182240574 に紹介されているものに # コメントなどを加筆修正。
~/.ssh-agent-info は初回ログイン時には存在しないので、エラーを防ぐために予め
$ touch ~/.ssh-agent-info
しておいても良い。
実行結果を以下に載せておく。
- CentOS初回ログイン時
mbp-13-retina:~ sseze$ ssh vbs sseze@192.168.56.101's password: Last login: Thu Jan 3 15:46:17 2013 from 192.168.56.1 Agent pid 1842 ssh-agent: restart....Agent pid 1627 Enter passphrase for /home/sseze/.ssh/centos63-key: Identity added: /home/sseze/.ssh/centos63-key (/home/sseze/.ssh/centos63-key) [sseze@centos63 ~]$
- ログイン2回目以降
Agent pid 1627 ssh-agent: Identity is already stored. [sseze@centos63 ~]$