VPSからBitbucketの自分のレポジトリがgit cloneできなくてハマった話

Bitbucket

最初にまとめとくと

おおまかな流れ
  • ConoHa VPSのサーバーからBitbucketに置いているレポジトリをgit cloneしたいのにできなかった
  • ssh -T ではログインできているのに、git cloneができなくなった時の対処法
  • ssh-add  [秘密鍵]でssh-agentに秘密鍵を渡す必要があった

WebアプリとかプログラムをBitbucket経由でVPSにデプロイする

ConoHa VPSの新規サーバーにスクレイピングするプログラムを置いてデータベースにどんどんデータをためたいと思った時にハマった話です。

Bitbucketは自分で作ったプログラムを非公開で置いとけるので重宝しています。

非公開ファイルのやり取りはsshを使って行うので、sshの設定が必要です。

.ssh/config はこんな感じで設定して

Host Bitbucket
HostName bitbucket.org
User git

IdentityFile /home/user1/.ssh/Bitbucket
TCPKeepAlive yes
IdentitiesOnly yes

.ssh/BitbucketはBitbucketとのSSHで使う秘密鍵です。

ホスト名を指定してsshでログインすると

$ ssh -T Bitbucket

logged in as git.

You can use git or hg to connect to Bitbucket. Shell access is disabled.

となってログインできるのに、

なぜか、git cloneがPermission Deniedされてしまう。

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

解決策:ssh-agentを起動して秘密鍵を渡しておく

VPSにログインして

ssh-agentを立ち上げ、ssh-addで秘密鍵をssh-agentに登録します。

$ eval `ssh-agent`

$ ssh-add .ssh/Bitbucket
Identity added: .ssh/Bitbucket (.ssh/Bitbucket)
$ ssh-add -l
4096 SHA256:pMFgP8QB+ttiZle+jfCfuVaBZ+cnBN2DvuUFBmY6Mqc .ssh/Bitbucket (RSA)

とすると、.ssh/ 内にある秘密鍵Bitbucketが登録されます。

これで、

git clone

すれば、Bitbucketからダウンロードできます。

gitは.sshを見に行ってくれないようなので、あらかじめssh-agentに教えてあげる必要があるようです。

ただこの方法はセキュリティ的には問題があります。

VPSを乗っ取られると、秘密鍵を全部持っていかれてしまう恐れがあります。

クラウドにはできるだけ大事なものは置かないほうがよいので、もっと良い解決策を紹介します。

もっと良い解決策:ForwardAgent yesを使う

sshを使ったアクセスの流れはこうです。

Macbook → ConoHa VPS → Bitbucket 

sshには便利なオプション-Aがあります。

ssh-agentがMacbookで登録しておいた秘密鍵情報を一時的にログイン先のVPSに持っていってくれます。

Macbook(クライアントPC)で

$ ssh-add -K .ssh/Bitbucket
Identity added: .ssh/Bitbucket (.ssh/Bitbucket)
$ ssh-add -l
4096 SHA256:pMFgP8QB+ttiZle+jfCfuVaBZ+cnBN2DvuUFBmY6Mqc .ssh/Bitbucket (RSA)

$ ssh -A conoha

とします。

ssh-add -K の -KはMacでだけ使えるオプションでキーチェーンに秘密鍵を登録するという意味です。

一回キーチェーンに登録してしまえばターミナルを立ち上げ直しても、秘密鍵を覚えていてくれます。

VPS側の.ssh/configのホストの設定を

Host Bitbucket
HostName bitbucket.org
User gituser
IdentityFile ~/.ssh/Bitbucket
TCPKeepAlive yes
IdentitiesOnly yes
ForwardAgent yes

のようにForwardAgentをyesにしておく。

こうすることで、クライアントPCからVPSに渡された秘密鍵をBitbucketに渡すことができるようになります。

 

コメント