最初にまとめとくと
- 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 gitIdentityFile /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に渡すことができるようになります。
コメント