コードリポジトリに公開鍵を登録する

前回の記事でローカルに対して秘密鍵の設定を行ったのでリポジトリにペアとなる公開鍵を登録してみます。
対象リポジトリはGitHubとBitbucketです。

GitHub

画面右上から設定画面に移動し、メニューの「SSH Keys」から公開鍵の一覧に移動します。

github-key3
Titleフィールドには管理名を、Keyフィールドには公開鍵ファイルをペーストします。

github-key4

登録が終わると一覧に追加されたことが確認できます。
登録した公開鍵は「https://github.com/ユーザ名.keys」でアクセスできます。制御はかかっていないので誰でもアクセスできる点に注意しましょう。
ちなみに今回登録した公開鍵は「https://github.com/crohaco.keys」からアクセスできます。

公開鍵認証

登録した公開鍵はGitの認証に使用することができます。

公開鍵を使うようなリポジトリを新規で作成するときは以下のようにします。

$ touch README.md
$ git init
Initialized empty Git repository in /home/kat/Test/gittest/test/.git/
$ git add README.md
$ git commit -m "add test"
[master (root-commit) 76e9662] add test
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 README.md
$ git remote add origin git@github.com:crohaco/test.git

通信方法がSSHでなければ鍵認証は行われません。変更するには

$ git remote set-url origin git@github.com:crohaco/test.git

とするか、.git/configを直接編集します。

[remote "origin"]
        #url = https://github.com/crohaco/test.git
        url = git@github.com:crohaco/test.git
        fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
        remote = origin
        merge = refs/heads/master

また、~/.ssh/id_rsa(デフォルト)以外を使用する場合は使用する秘密鍵の明示的な指定を行う必要があります。
以下のように~/.ssh/configに追記を行いましょう。

Host github.com
    HostName github.com
    User git 
    IdentityFile ~/.ssh/github # 秘密鍵のパス
    Port 22
$ git push -u origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 207 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@github.com:crohaco/test.git
 * [new branch]      master -> master
Branch master set up to track remote branch master from origin.

パスワードを聞かれずにPUSHでき、鍵認証が行われていることが確認できました。

BitBucket

画面右上のアカウント管理→メニューの「SSHキー」から公開鍵の追加画面に移動します。
bitbucket-key2
GitHubと同じように、管理名と公開鍵情報を入力します。

bitbucket-key3
登録が完了すると一覧に表示されます。

公開鍵認証

Mercurialの認証でも公開鍵を行うことができます。
せっかくなのでBitbucketではMercurialを使います。リポジトリは非公開設定とします。

$ hg clone ssh://hg@bitbucket.org/crohaco/test
複製先ディレクトリ: test
差分はありません
ブランチ default へ更新中
ファイルの更新数 0、 マージ数 0、 削除数 0、 衝突未解消数 0

SSH通信では登録した公開鍵に対応する秘密鍵が~/.ssh/id_rsaから自動的に選択され、認証が行われます。

しかし、HTTPでは鍵認証が行われずパスワードの入力を求められてしまいました。

$ hg clone https://bitbucket.org/crohaco/test
HTTP 認証が要求されています
認証領域(realm): Bitbucket.org HTTP
ユーザ: crohaco
パスワード:

この状態からSSH通信に変更する場合は.hg/configを編集します。

;デフォルト以外の秘密鍵を指定する場合はuiセクションにsshオプションを指定する
;[ui]
;ssh = ssh -i ~/.ssh/private
 
[paths]
default = ssh://hg@bitbucket.org/crohaco/test

configの変更後はパスワードなしでPULLすることができました。

$ hg pull
ssh://hg@bitbucket.org/crohaco/test から取り込み中
差分はありません

もちろんPULLだけでなくPUSH等の他の操作も同様に鍵認証が行われます。