この記事では、SSHを利用してGitHubに接続する方法を解説します。
「git push
するたびにパスワードを打つのが面倒くさい!」
「ユーザー名やパスワード入力なしでGitHubと通信したい!」
という人は、秘密鍵と公開鍵を作成して、GitHubにアップしましょう。
[memo title=”MEMO”]
- Macの方はターミナルを使って操作できます。
- Windowsの方はGit Bashを使って操作するのがいいでしょう。
[/memo]
Git Bashのインストールはこちらから→Git for windows
作業の流れは以下の通りです。
[list class=”ol-circle li-mainbdr main-bc-before”]
- 公開鍵・秘密鍵を作成する
- 公開鍵をGitHubにコピーする
- 接続確認
- git pushコマンドを試してみる
[/list]
公開鍵・秘密鍵の存在を確認する
既に秘密鍵・公開鍵が作成されているかどうかをまず確認します。
以下のコマンドを入力してください(「$」はコマンドではありません)
$ ls ~/.ssh
- id_rsa
- id_rsa.pub
が存在している場合は、「秘密鍵・公開鍵のペアを作成する」作業は飛ばしてOKです。
.pubという拡張子のファイルは「公開鍵」です。
この場合だと、id_rsaが秘密鍵、id_rsa.pubが公開鍵です。
秘密鍵・公開鍵のペアを作成する
秘密鍵・公開鍵が存在しない場合は、新たに作成しなければいけません。
以下のコマンドで鍵を作成します。
$ ssh-keygen -t rsa
[alert title=”注意”]コマンドを実行すると、以下のように聞かれますが、全てEnterを押して大丈夫です(Enter3回でOK)
[/alert]
コマンド実行後、~/.ssh
ディレクトリにid_rsa
、id_rsa.pub
が作成されていることを確認しましょう。
次の手順では、id_rsa.pub
の内容をコピーして、GitHubにアップします。
公開鍵をGitHubに登録する
GitHubを開きます。
右上のアイコンをクリックして、「Settings」を開きましょう。

左のメニューから「SSH and GPG keys」を選択して、右上の「New SSH key」をクリックします。

次に開かれる画面に公開鍵を登録します。

Titleは任意の名称でOKです。
私は登録する公開鍵がどのマシンの公開鍵なのか、自分でわかるような名前しました。
それでは、コマンドで作成した公開鍵をクリップボードにコピーして、GitHubの画面上に貼り付けます。
コマンドでコピーする場合は以下のコマンドを使えばOKです。
Mac:$ pbcopy < ~/.ssh/id_rsa.pub
Windows:$ clip < ~/.ssh/id_rsa.pub
メモ帳で開いてコピーしてもいいですし、cat
コマンドなどで開いてもOKです。
「ssh-rsa」から全部コピーします。
貼り付けが終わったら「Add SSH key」ボタンをクリックします。
登録後の画面は以下のようになります。

接続できるか確認する
以下のコマンドで接続を確認しましょう。
$ ssh -T git@github.com
接続に成功している場合は、以下のメッセージが表示されます。
[box class=”box3″]Hi your-name! You’ve successfully authenticated, but GitHub does not provide shell access.[/box]
git pushしてみる
GitHubとの通信プロトコルに「HTTPS」を利用している場合は、ユーザー名とパスワードを毎回聞かれます。
ローカルPCのGitリポジトリで以下のコマンドを実行してプロトコルを確認しましょう。
$ git remote -v
以下のように、https
で始まるURLが表示されていたら、これをgit
に変更しなければいけません。
[box class=”box3″]
origin https://github.com/fj-personal/study-2020.git (fetch)
origin https://github.com/fj-personal/study-2020.git (push)
[/box]
https通信からsshプロトコルに変更する
git remote -v
で表示されたhttps://github.com<strong>/</strong>
の部分をgit@github.com<strong>:</strong>
に変更します。
対象のGitリポジトリで以下のコマンドを実行します。
[memo title=”MEMO”]git remote set-url origin [Host名]:[ユーザID]/[リポジトリ].git[/memo]
$ git remote set-url origin git@github.com:fj-personal/study-2020.git
[alert title=”注意”]「/」と「@」、「:」の違いに注意してください。[/alert]
git remote -v
で変更を確認します。
[box class=”box3″]$ git remote -v
origin git@github.com:fj-personal/study-2020.git (fetch)
origin git@github.com:fj-personal/study-2020.git (push)
[/box]
エラー対応集
GitUpでgit push
するときに、
「Failed connecting to “origin” remote: authentication required but no callback set」
というエラーが出ました。
ssh agentに秘密鍵を登録することで上記のエラーは解消できます。
ssh agentは公開鍵認証で使われる認証鍵を保持するプログラムのことです。
ssh agentに秘密鍵を登録するコマンドは以下の通りです。
$ ssh-add ~/.ssh/id_rsa
ただし、上記のコマンドだとMacを再起動すると登録情報が消えてしまいます。
そのため、以下の-K
オプションを追加して、keychainに秘密鍵を登録します。
$ ssh-add -K ~/.ssh/id_rsa
その上で、~/.ssh/config
に以下のような設定を書き、初回ssh時にkeychainから秘密鍵を自動で読み込むようにします。
Host *
UseKeychain yes
AddKeysToAgent yes
IdentityFile ~/.ssh/id_rsa
参考:How can I permanently add my SSH private key to Keychain so it is automatically available to ssh?