はじめに
これまで会社で利用しているGithubのプライベートレポジトリへのアクセスにはHTTPSを利用していた。
リモートレポジトリへプッシュする度にユーザ名とパスワードを入力するのが面倒だったが、セキュリティ上我慢していた。
また設定ファイルやoriginのURLに直接ユーザ名、パスワードを指定するのはもってのほかだと思って我慢していた。
でももう我慢する必要はない。
GithubへはSSH接続できることが分かったからだ!(遅い)
Githubへのアクセスに利用できるプロトコル
公式に利用できるのは以下の2つ。
- https
- ssh
sshなんてあったかなと思うかもしれないが、
「Clone or Download」ボタンを押下すると右上に
「Use SSH」というリンクがありssh用のURLもコピーできるようになっている。
なおドキュメントはないが以下も利用できるらしい。*1
- http
- git
どちらもセキュアではないのであえて利用する必要はない。
gitについてはread-onlyアクセス。
またGitとしては上記に加えてLocal(ファイルシステムアクセス)が利用できるらしい。*2
HTTPSとSSHの使い分け
所感だが、Pro Git Book (*2) を参考にすると以下のような使い分けになる。
- HTTPS
- パブリックレポジトリとして不特定多数に公開する場合(読込み専用レポジトリ)
- 企業ネットワーク内からアクセスする場合(ファイヤーウォール対策)
- SSH
- プライベートレポジトリとして特定のメンバーに公開を限定している場合
- 転送効率を重視する場合
SSHによるアクセス方法
前置きが長くなったがSSHアクセスの設定方法を
「これからcloneする新規のレポジトリ」と「すでにcloneしている既存のレポジトリ」のそれぞれのケースで紹介する。
cloneの段階でSSHのURLを選択する場合(新規のレポジトリ)
- sshの秘密鍵と公開鍵を生成(パスワードなしでアクセスしたい場合はパスフレーズを空にする)
- 生成した公開鍵をGithub上に登録
- レポジトリへのプッシュを行うユーザのアカウントの「Settings」>「SSH and GPG Keys」>「New SSH key」に登録
- 「Clone or Download」>「Use SSH」で表示されるURLをコピー
-
コピーしたURLでレポジトリをClone
% git clone git@github.com:レポジトリ所有者アカウント名/レポジトリ名.git
※URLの@の左側がgitとなっているが、このユーザ名は認証には利用していないようなので「hoge」でも省略でも問題ない。
確認
% ssh github.com
Enter passphrase for key '/Users/xxxx/.ssh/id_rsa':
PTY allocation request failed on channel 0
Hi <プッシュを行うユーザのアカウント名>! You've successfully authenticated, but GitHub does not provide shell access.
Connection to github.com closed.
※SSHの鍵生成時にパスフレーズを設定しなかった場合はパスワード要求はない
cloneの段階で一旦HTTPSのURLを選択した場合(既存のレポジトリ)
- sshの秘密鍵と公開鍵を生成(パスワードなしでアクセスしたい場合はパスフレーズを空にする)
- 生成した公開鍵をGithub上に登録
- レポジトリへのプッシュを行うユーザのアカウントの「Settings」>「SSH and GPG Keys」>「New SSH key」に登録
-
cloneしたマシン上でoriginのURLを変更
% git remote -v origin https://github.com/レポジトリ所有者アカウント名/レポジトリ名.git (fetch) origin https://github.com/レポジトリ所有者アカウント名/レポジトリ名.git (push) % git remote set-url origin git@github.com:レポジトリ所有者アカウント名/レポジトリ名.git % git remote -v origin git@github.com:レポジトリ所有者アカウント名/レポジトリ名.git (fetch) origin git@github.com:レポジトリ所有者アカウント名/レポジトリ名.git (push)
※URLの@の左側がgitとなっているが、このユーザ名は認証には利用していないようなので「hoge」でも省略でも問題ない。
確認
% ssh github.com
Enter passphrase for key '/Users/xxxx/.ssh/id_rsa':
PTY allocation request failed on channel 0
Hi <プッシュを行うユーザのアカウント名>! You've successfully authenticated, but GitHub does not provide shell access.
Connection to github.com closed.
※SSHの鍵生成時にパスフレーズを設定しなかった場合はパスワード要求はない
参考URL
*1: http://qiita.com/chroju/items/67da13c672efcd2bc787
*2: https://git-scm.com/book/ja/v1/Git-%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC-%E3%83%97%E3%83%AD%E3%83%88%E3%82%B3%E3%83%AB