話題の記事

【メモ】githubの複数アカウントにSSH接続するための設定手順

2013.07.14

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

すでにGitとgithubアカウント(以降メインアカウントとする)を設定済みという前提で別のgithubアカウント(以降サブアカウントとする)を設定したいという場合があります。例えば仕事用のgithubアカウントとは別にプライベート用のアカウントに接続したい、案件毎に接続先を変える必要があるなどでしょうか。

すでに色々なブログで書かれていますが、具体的な手順を社内のあるメンバーに共有する必要があったので設定の手順をメモとして残しておきたいと思います。
github以外に接続する場合でも基本的には同じ手順になります。

まだgithubの設定を行っていないという方はこちらの「Set up git」の手順を進めてください。SSH Keyの生成はこちら「Generating SSH Keys」です。
また、そもそもGitって何?という方はこちら「サルでもわかるGit入門」をどうぞ。

この記事の解説はCUIを利用できることが前提となっています。

1,サブアカウント用の鍵を作る

それでは、設定を進めましょう。
.sshディレクトリに移動し中身を確認しておきます。すでにメインアカウントが設定されている場合はid_rsa(秘密鍵)とid_rsa.pub(公開鍵)というファイルがあるはずです。

$ cd ~/.ssh/
$ ls
# id_rsa.pub id_rsa

2,鍵の生成

$ ssh-keygenコマンドを使ってサブアカウント用の秘密鍵と公開鍵を作りましょう。
コマンドのオプション-fでファイル名を指定してファイルが上書きされないよう注意しましょう。Passphrase(パスフレーズ)は必要に応じて入力してください。

$ ssh-keygen -t rsa -C "your_email@youremail.com" -f [file name]
# Creates a new ssh key using the provided email
# Generating public/private rsa key pair.
# Enter file in which to save the key (/c/Users/you/.ssh/[file name]): [Press enter]
# Enter passphrase (empty for no passphrase): [Type a passphrase]
# Enter same passphrase again: [Type passphrase again]

鍵の生成が終わったら$ lsで鍵があるか確認しておきましょう。
仮にgithub_private_rsaという名前で作ったことにします。

$ ls
# id_rsa.pub id_rsa github_private_rsa.pub github_private_rsa

3,公開鍵をクリップボードにコピーする

まずは生成した公開鍵をクリップボードにコピーしましょう。

$ pbcopy < ~/.ssh/github_private_rsa.pub
[/bash]

<p>Windowsの場合は<tt>clip</tt>コマンドでコピーできます。</p>


<p>もちろん、他の方法でコピーしていただいても構いません。</p>


<h2 id="toc-4github">4,公開鍵をgithubに登録する</h2>
<p>生成した公開鍵をgithubに登録します。<br />
<a href="https://github.com/settings/profile" target="_blank">githubのアカウントセッティング</a>にアクセスし、<a href="https://github.com/settings/ssh" target="_blank">SSH Keys</a>を開きます。</p>

<p>ここに登録済みの公開鍵が表示されます。<br />
今回は登録するだけなので<strong>Add SSH Key</strong>をクリックして新しい公開鍵を入力します。</p>

<p><img src="https://cdn-ssl-devio-img.classmethod.jp/wp-content/uploads/2013/07/6959eaec3d89fc594d708223e0ba367c-960x531.png" alt="登録画面" width="960" height="531" class="alignnone size-large wp-image-65137" /></p>

<h2 id="toc-5host">5,コンフィグファイルでHostの指定をする</h2>
<p>最後にSSH configでHost情報を設定しましょう。</p>

$ vi ~/.ssh/config

configファイルに以下のようにHost情報を記述します。

Host github-private
  User git
  Port 22
  HostName github.com
  IdentityFile ~/.ssh/github-private_rsa
  TCPKeepAlive yes
  IdentitiesOnly yes

それぞれの意味については以下の通りです。

Host ホスト名 githubの場合はgithub-{githubアカウント名}を指定
User ログインユーザー名 githubの場合はgit
Port ポート デフォルトはPort 22
HostName ホストのアドレス、またはIP githubの場合はHostName github.com
IdentityFile 利用する秘密鍵を指定する 秘密鍵へのパスを指定
IdentitiesOnly 持続的接続 yesを指定
TCPKeepAlive IdentityFileを利用する場合 yesを指定

記述できたら間違いがないかもう一度確認し、:wpで保存して抜けます。
これで設定は完了です。

6,接続テストを行う

最後に接続テストを行いましょう。記述したHost名を指定して接続します。

$ ssh -T github-private

# The authenticity of host github-private can't be established.
# RSA key fingerprint is ...
# Are you sure you want to continue connecting (yes/no)?

$ yes

なにやら聞かれたらyesと答えます。

# Hi username! You've successfully authenticated, but Github does not
# provide shell access.

このように返ってきたらアクセス成功です。
これで接続できるようになりました。

7,実際にリポジトリにアクセスする時に

さて、設定はこれで完了したわけですが、リポジトリにアクセスする際に気をつけなければいけないところがあります。
それは、リポジトリにアクセスする際に接続URLのホストをconfigで指定した通りに変更してあげないといけません。

例えばデフォルトのリポジトリURLはこうなっています。

git@github.com:nonakaryuichi/git-test.git
//git@[Host name]:[Account name]/[Repository name].git

この[Host name]をSSH configに指定したHost名に変更します。

git@github-private:nonakaryuichi/git-test.git

これはgit remote add origin ...git clone ...などを行うとき、書き換えが必要なので注意しましょう。リポジトリの公開状況によっては必要ない場合があります。

以上、サブアカウントの設定方法でした。