今までずっとHTTPS接続を使用していましたので、改めてSSH接続の手順をまとめておきたいと思います。
公開鍵と秘密鍵を作成する
公開鍵暗号での認証には公開鍵と秘密鍵が必要になります。 秘密鍵は秘密というだけあって他の人に見られてはいけません。つまりどこかに送信してはいけません。 逆に公開鍵は公開と言っていますので他の人に見られてもOKです。 秘密鍵は自分で保持し、公開鍵は相手(ここではGitHub)に送ります。 まずは公開鍵と秘密鍵のペアを生成しましょう。
まず最初に、鍵を入れるフォルダ(ここでは ~/.ssh
)に移動します。
$ cd ~/.ssh
はじめて鍵を生成するときは何も入っていないはずです。
ssh-keygen -t rsa
のコマンドで鍵を生成します。
$ ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/Users/(username)/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again:
Enter file in which to save the key
Enter passphrase
Enter same passphrase again
と聞かれますが、すべてEnterを押してもらえればOKです。
そうすると id_rsa
と id_rsa.pub
の2つの鍵が生成されます。
既にid_rsaが存在する人は上書きされてしまうので注意しましょう。
もし違う名前で生成したい時は
$ ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/Users/(username)/.ssh/id_rsa):id_git_rsa Enter passphrase (empty for no passphrase): Enter same passphrase again:
のように、1回目に聞かれたタイミングで名前(ここでは id_git_rsa
)を指定します。
あとはEnterで id_git_rsa
と id_git_rsa.pub
が生成されます。
ちなみに、名前を指定しない時は勝手に ~/.ssh
内に鍵を生成してくれますが、上記のように名前を指定するときは ~/.ssh
内にいないとこの中に生成してくれないので注意です。
公開鍵をGitHubにアップする
https://github.com/settings/ssh
で公開鍵の設定が出来ます。(GitHubに登録していることが前提条件です)
画面右上の「New SSH key」のボタンを押します。
「Title」に公開鍵名、「Key」に公開鍵の中身を入れます。
なお、鍵の中身のクリップボードへのコピーは下記コマンドで可能です。
(Mac)
$ pbcopy < ~/.ssh/id_rsa.pub
(Windows)
$ clip < ~/.ssh/id_rsa.pub
*鍵の名前は自分の作成したもの。
接続を試してみよう
$ ssh -T git@github.com
Hi (account名)! 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/id_git_rsa #ここに自分の鍵のファイル名 User git
を作成しましょう。
これで、もう一度接続をやってみるとうまくいくはずです。
以下のようにコマンドを打って確かめて見ましょう。
ssh -T github
GitHubとやりとりする
GitHubと実際にやりとりするときにID・パスワードを聞かれた場合はSSH接続がうまくいっていません。
リポジトリのディレクトリに入り
git config remote.origin.url
で確認し https://github.com/[ユーザID]/[リポジトリ]となっていたら
git remote set-url origin git@github.com:[ユーザID]/[リポジトリ].git
とする。
~/.ssh/config
で設定している場合は
git remote set-url origin [Host名]:[ユーザID]/[リポジトリ].git
[Host名]とは~/.ssh/configの一行目のHostの名前(ここではgithub)のことです。
ちなみに、この設定はリポジトリのディレクトリ内の /.git/config
で設定出来ます。
さらに詳細を知りたい人は下記の本がお勧めです。(詳細は画像をクリック)