GitHubに公開鍵認証方式でSSH接続する

今回はGitHubにHTTPS接続ではなくSSH接続する方法について説明します。SSHは暗号化通信のためより安全に通信することが出来ます。

鍵の作成

ssh接続するためには公開鍵秘密鍵が必要です。公開鍵はその名の通り公開している鍵なのでGitHubサイドに渡します。秘密鍵は自分で保持します。GitHubにアクセスする際に公開鍵のペアとなる秘密鍵をもっている人だけがアクセスできるわけです。

まずはその公開鍵と秘密鍵のペアを生成します。鍵を保存するフォルダに移動し、次のようにコマンドで鍵を生成します。このとき3つの質問をされますが何も入力せずにEnterを三回押せばid_rsa.pub(公開鍵)とid_rsa(秘密鍵)が生成されます。ちなみに1つ目の質問に答えることで鍵の名前を変えられます。デフォルトではid_rsaとなっています。すでにid_rsaが存在する場合は書き換えられてしまうので名前を指定するようにしてください。 パスフレーズは入力しなければ以降パスフレーズの入力が必要なくなるので初心者は入力しなくていいでしょう。

$cd ~/.ssh
$ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/(ユーザー名)/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:

公開鍵の登録

次に生成した公開鍵をGitHubに登録します。 まず先程生成した公開鍵をクリップボードにコピーしておきましょう

$ pbcopy < ~/.ssh/id_rsa.pub (Mac)
$ clip < ~/.ssh/id_rsa.pub (Windows)

*自分で名前を設定した場合はその名前に書き換えてください。

次にhttps://github.com/settings/sshにアクセスし、Keyに先程コピーした公開鍵の中身をペーストします。Titleには鍵の名前を登録します。登録しなくても大丈夫です。

秘密鍵の登録

鍵の名前をid_rsaにしていた場合、実は今までの設定だけでssh接続することが出来るようになります。

$ ssh -T git@github.com
Hi (ユーザー名)! You've successfully authenticated, but GitHub does not provide shell access.

しかし、鍵の名前を自分で設定している場合はもう少し設定が必要です。これはデフォルトでssh接続の際~/.ssh/id_rsa,~/.ssh/id_dsa,~/.ssh/identityは見に行くことになっているためです。 違う名前で登録している場合はそれをコンピューターに教えてあげる必要があります。 ~/.ssh/configに次のように追記してください。

Host github github.com
  HostName github.com
  IdentityFile ~/.ssh/(自分の鍵のファイル名)
  User git

*~/.ssh/configファイルが存在しなかった場合自分で作ってください。

ここまで設定したら再度試してみましょう

$ssh -T github

gitコマンドでGitHubに接続する

最後にgit pushなどのリモートリポジトリとのやりとりを可能にするためにgitの設定を少しだけします。今の状態だとgitはリモートリポジトリにHTTPSで接続してしまうので次のように設定します。

git remote set-url origin git@github.com:[ユーザID]/[リポジトリ].git

正しく登録出来ているかは次のコマンドで確認することが出来ます。

$git remote -v