GitHubにSSHの公開鍵を登録し、パスワードなしでgit pushするまでの手順

この記事では、SSHを利用してGitHubに接続する方法を解説します。

git pushするたびにパスワードを打つのが面倒くさい!」

「ユーザー名やパスワード入力なしでGitHubと通信したい!」

という人は、秘密鍵と公開鍵を作成して、GitHubにアップしましょう。

MEMO
  • Macの方はターミナルを使って操作できます。
  • Windowsの方はGit Bashを使って操作するのがいいでしょう。

Git Bashのインストールはこちらから→Git for windows

作業の流れは以下の通りです。

  1. 公開鍵・秘密鍵を作成する
  2. 公開鍵をGitHubにコピーする
  3. 接続確認
  4. git pushコマンドを試してみる

公開鍵・秘密鍵の存在を確認する

既に秘密鍵・公開鍵が作成されているかどうかをまず確認します。

以下のコマンドを入力してください(「$」はコマンドではありません)

$ ls ~/.ssh
  • id_rsa
  • id_rsa.pub

が存在している場合は、「秘密鍵・公開鍵のペアを作成する」作業は飛ばしてOKです。

.pubという拡張子のファイルは「公開鍵」です。

この場合だと、id_rsaが秘密鍵、id_rsa.pubが公開鍵です。

秘密鍵・公開鍵のペアを作成する

秘密鍵・公開鍵が存在しない場合は、新たに作成しなければいけません。
以下のコマンドで鍵を作成します。

$ ssh-keygen -t rsa
注意
コマンドを実行すると、以下のように聞かれますが、全てEnterを押して大丈夫です(Enter3回でOK)

  • Enter file in which to save the key (/Users/user/.ssh/id_rsa):
  • Enter passphrase (empty for no passphrase):
  • Enter same passphrase again:
  • コマンド実行後、~/.sshディレクトリにid_rsaid_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

    接続に成功している場合は、以下のメッセージが表示されます。

    Hi your-name! You’ve successfully authenticated, but GitHub does not provide shell access.

    git pushしてみる

    GitHubとの通信プロトコルに「HTTPS」を利用している場合は、ユーザー名とパスワードを毎回聞かれます。

    ローカルPCのGitリポジトリで以下のコマンドを実行してプロトコルを確認しましょう。

    $ git remote -v

    以下のように、httpsで始まるURLが表示されていたら、これをgitに変更しなければいけません。

    origin https://github.com/fj-personal/study-2020.git (fetch)
    origin https://github.com/fj-personal/study-2020.git (push)

    https通信からsshプロトコルに変更する

    git remote -vで表示されたhttps://github.com<strong>/</strong>の部分をgit@github.com<strong>:</strong>に変更します。

    対象のGitリポジトリで以下のコマンドを実行します。

    MEMO
    git remote set-url origin [Host名]:[ユーザID]/[リポジトリ].git
    $ git remote set-url origin git@github.com:fj-personal/study-2020.git
    注意
    「/」と「@」、「:」の違いに注意してください。

    git remote -vで変更を確認します。

    $ git remote -v
    origin git@github.com:fj-personal/study-2020.git (fetch)
    origin git@github.com:fj-personal/study-2020.git (push)

    エラー対応集

    GitUpでgit pushするときに、

    「Failed connecting to “origin” remote: authentication required but no callback set」

    というエラーが出ました。

    ssh agentに秘密鍵を登録することで上記のエラーは解消できます。
    ssh agentは公開鍵認証で使われる認証鍵を保持するプログラムのことです。

    SSH-AGENT (1)

    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?

    コメントを残す

    メールアドレスが公開されることはありません。 * が付いている欄は必須項目です